getWindow()。setBackgroundDrawable拉伸背景

时间:2015-01-21 22:00:30

标签: android

我创建了一个背景图像,它完全适合设备显示,没有状态栏和操作栏。这意味着我的设备的整个高度是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()));

    ...
}

那为什么它不适用于某项活动?

2 个答案:

答案 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相关问题。