如何在Android中为不同的分辨率使用不同的背景图像?

时间:2012-11-07 14:02:28

标签: android android-layout android-resources android-resolution

我正在为Android 平板电脑安装Android应用完整图片背景,但我不能 使用9补丁,所以我需要背景尽可能接近窗口大小。

我测试的内容:

我已经使用drawable-ldpidrawable-mdpi等文件夹进行了测试,但由于我希望图片适合窗口,因此效果不佳。

现在,我正在尝试使用drawable-wxxxdp文件夹,将尺寸 close 的图片添加到实际窗口大小。

所以我有这个文件夹结构(每个文件夹都有不同的图像,即:不同文件夹中相同大小的图像不同):

drawable-w800dp-mdpi // 800x600px image
drawable-w800dp-hdpi // 800x600px image
drawable-w1024dp-mdpi // 1024x600px image
drawable-w1024dp-hdpi // 1024x600px image
drawable-w1280dp-mdpi // 1280x800 image
drawable-w1280dp-hdpi // 1280x800 image
drawable-w1280dp-xhdpi // 1280x800 image

问题是当我在不同的平板电脑上测试应用时,它并不总是从预期的文件夹中获取图像

例如:在 1280x800px和160 dpis平板电脑中报告(使用DisplayMetrics窗口大小为1280x752 ,它使用来自的1280x800px图像drawable-w1280dp-mdpi文件夹并从顶部和底部剪切一些图像。但是在 1280x800px和213dpis平板电脑上 报告窗口大小为1280x736 它会从drawable-w800dp-hdpi获取图像...我希望从其他文件夹中获取它,例如drawable-w1024dp文件夹之一...但不是从那一个......

另一方面,如果我尝试使用 1024x600px和160dpis 等配置报告窗口大小为1024x552 的模拟器,它会从{{1>获取图像文件夹,但它缩小它并将其放在屏幕中心所以我以图像周围的大边框结束。

文件:

我正在使用的测试布局是:

drawable-w1024dp-hdpi

在我的Manifest文件中我有:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/appBackground"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="center"
        android:src="@drawable/background_image"
        tools:ignore="ContentDescription" />

</RelativeLayout>      

更新 我的活动代码:

<uses-sdk
    android:minSdkVersion="13"
    android:targetSdkVersion="15" />

<supports-screens 
android:anyDensity="true" 
android:largeScreens="true"
android:normalScreens="true" 
android:smallScreens="true"
android:resizeable="true"/>

要点:

所以我不知道如何从文件夹预测应用程序将拍摄图像?它将用它做什么?(规模,裁剪...)

额外背景:

我已经检查了android-resoruces标签上的所有问题,我已多次阅读官方文档:

以及一些相关问题:

更新:修复了文件夹名称中的拼写错误。

2 个答案:

答案 0 :(得分:1)

你是对的,它会从w800dp中选择资源,因为你是在纵向模式下运行。

当屏幕方向在横向和纵向之间切换以反映当前可用于UI的实际宽度时,系统对应的宽度值会发生变化。

使用res/drawable-sw600dp

当屏幕方向改变时,设备的smallestWidth不会改变。

答案 1 :(得分:1)

如果您要定位特定设备。或者所有介于两种分辨率之间的设备,则必须首先找到设备的宽度。像这样

Display display ; 
int width =0;
display = getWindowManager().getDefaultDisplay(); 
width = display.getWidth();

之后,您可以创建具有宽度条件的if语句,并针对不同的屏幕大小进行不同的布局。这个不是推荐的方法,但在某些情况下效果很好

    if(width>=750)
      {
          setContentView(R.layout.screen_blue_heigh);
      }
   else if(width>=500&&width<750)
      {
          setContentView(R.layout.screen_blue_heigh);
      }
   else if(width<500&&width>=330)
      {
              setContentView(R.layout.screen_blue_medium);
      }
   else if(width<320)
       {
          setContentView(R.layout.screen_blue_low);
       }

希望这会对你有所帮助。