我创建了一个背景图像,它完全适合设备显示,没有状态栏和操作栏。这意味着我的设备的整个高度是1280像素。 没有状态栏和动作栏,它是1038像素。我的背景图像正好是1038像素高。当我将图像设置为布局的背景时:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackground(Helper.loadDrawableFromFile(this.getResources(), Helper.getBackgroundLoginImagePath()));
....
}
它完全适合我想要的屏幕。问题是我有一个滚动视图,当我想在我的edittexts中键入内容时,键盘会弹出,我的背景图像会被锁定。
所以我改变了我的代码,在我的活动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()));
...
}
但由于某种原因,背景图像现在被拉伸,因此高度比原始高,我无法看到整个图像。 (它大约60像素到高)。
那里发生了什么?为什么' setBackgroundDrawable'拉伸我的形象?
修改
当我在对话框片段中执行以下操作时,我认为这与在活动中完成相同,完美地运行:
public Dialog onCreateDialog(Bundle savedInstanceState) {
...
dialog.getWindow().setBackgroundDrawable(Helper.loadDrawableFromFile(this.getResources(), Helper.getBackgroundLoginImagePath()));
...
}
那为什么它不适用于某项活动?
答案 0 :(得分:2)
如果您不想拉伸,则必须缩放图像。为此,我最好将以下内容用于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将“均匀地缩放图像(保持图像的纵横比),使图像的尺寸(宽度和高度)等于或小于视图的相应尺寸(减去填充)”。 有关缩放类型的更多信息,请访问:http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
最后,值得一提的是,在API级别16中不推荐使用setBackgroundDrawable。文档建议使用setBackground(Drawable)。
答案 1 :(得分:2)
如果您不希望通过键盘添加视图,请添加
android:isScrollContainer="false"
您可以使用ImageView而不是视图。的setBackground()
请参阅this相关问题。