我创建了一个完全适合设备显示的背景图像,没有状态栏和操作栏。这意味着我的设备的整个高度是 1280 像素。 没有状态栏和操作栏它是 1038 像素。我的背景图片正好是 1038 像素高。当我将图像设置为我的布局背景时:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackground(Helper.loadDrawableFromFile(this.getResources(), Helper.getBackgroundLoginImagePath()));
....
}
它完全适合我想要的屏幕。问题是我有一个 ScrollView ,当我想在我的 edittexts 中输入一些东西时,键盘弹出并且我的背景图像被锁定。
所以我更改了我的代码以在我的 Activity onCreate 中将背景图像设置为窗口:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_login);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
this.getWindow().setBackground(Helper.loadDrawableFromFile(this.getResources(), Helper.getBackgroundLoginImagePath()));
...
}
但由于某种原因,背景图像现在被拉伸(stretch),以至于高度比原始图像高,我看不到整个图像。 (大约 60 像素到高)。
那里发生了什么?为什么“setBackgroundDrawable”会拉伸(stretch)我的图像?
编辑
当我在对话 fragment 中执行以下操作时,我认为这与在 Activity 中执行的操作完全相同,效果完美:
public Dialog onCreateDialog(Bundle savedInstanceState) {
...
dialog.getWindow().setBackgroundDrawable(Helper.loadDrawableFromFile(this.getResources(), Helper.getBackgroundLoginImagePath()));
...
}
那么为什么它不能用于 Activity ?
最佳答案
如果你不想被拉伸(stretch),你必须缩放图像。为此,我最好在 R.layout.activity_login 中使用以下内容:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:src="@drawable/yourdrawable"
android:scaleType="centerInside">
</ImageView>
</FrameLayout>
CENTER_INSIDE 将“统一缩放图像(保持图像的宽高比),以便图像的两个尺寸(宽度和高度)将等于或小于 View 的相应尺寸(减去填充)”。 有关缩放类型的更多信息,您可以在此处查看:http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
最后,值得一提的是,setBackgroundDrawable 在 API 级别 16 中已被弃用。文档建议改用 setBackground(Drawable)。
关于android - getWindow().setBackgroundDrawable 拉伸(stretch)背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28077660/