android - getWindow().setBackgroundDrawable 拉伸(stretch)背景

标签 android

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

相关文章:

Android:从 Fragment 更改 ActionBar 菜单项

android - FragmentContainerView 使用 findNavController

android - 如何在 Android 的 XMLWorker 中使用 iText 中的 CJK 字体?

android - 将 RecyclerView 单击的项目移动到顶部

android - 即使您的应用程序未运行,您如何检测 Nougat 上的网络连接丢失?

java - 数组适配器不调用 GetView

android - 如何比较从 Google MLKit for Android 获取的两个 Face 对象

android如何以编程方式仅捕获我在应用程序中的日志条目

java - 我想在我的 Android 项目中使用 TuProlog

android - NoSuchMethodError : The method 'validate' was called on null 错误