2016-03-09 119 views
1

我正在努力让自己的布局能够通过Android进行自定义和拾取。
我创建了一个测试应用程序,使用这些资源目录:如何让Android根据屏幕尺寸选择不同的布局

  • 布局
  • 布局大
  • 布局正常
  • 布局小
  • 布局sw600dp
  • 布局sw720dp
  • layout-w600dp
  • layout-w720dp
  • 布局XLARGE

他们基本上都含有相同的布局文件,唯一的区别是,一个文本视图只是有布局目录名的内容:

<android.support.v7.widget.AppCompatTextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/btnTest" 
     android:text="Layout xxxxx" /> 

我的问题是,无论我创建的AVD如何,它们都会拾取“正常”布局文件。 下面是AVD的我已经测试过,并在此调试代码的输出:

Configuration config = getResources().getConfiguration(); 
String sizeName = getSizeName(this); 

Log.d(TAG, String.format("screen config smallestScreenWidthDp:%d screenWidthDp:%d densityDpi:%d sizeName: %s" , 
       config.smallestScreenWidthDp, config.screenWidthDp, config.densityDpi, sizeName)); //NON-NLS 
  • 的Nexus 6P,1440x2560,518ppi:
    • smallestScreenWidthDp:360 screenWidthDp:360 densityDpi:640 sizeName:正常
  • 银河S4迷你, 4.3" 540x960,256ppi:
    • smallestScreenWidthDp:360 screenWidthDp:360 densityDpi:240 sizeName:正常
  • WIKO果阿,3.5" 小320x480,165 PPI:
    • smallestScreenWidthDp:320 screenWidthDp:320 densityDpi:160 sizeName:正常

我在做什么错?

编辑:这不是一个AVD问题,我在物理设备上得到相同的行为;我的应用选择Nexus 6P(1440x2560,518ppi)和Wiko GOA(320x480,165ppi)设备上的Normal布局。

这是我的test project作为参考。

+0

请尝试DisplayMetrics metrics = getResources()。getDisplayMetrics(); –

+0

也命名您的大,正常和小文件夹sw符号。不要将两个命名约定混合在一起 –

+0

@ M.S.P,那我该怎么做? DisplayMetrics.densityDpi返回与我的其他日志输出相同的值。 –

回答

0

无论你是小型,普通或大型用户,或者使用dp布局文件夹,android设备都会根据他们的屏幕尺寸自动获取正确的布局。

希望这会工作!

+0

删除sw 和w 文件夹,只剩下-small,-normal,-large和-xlarge完好无损,什么都不做 –

+0

请问做相反的这个还是sw 和w 布局文件夹并删除其他人。 –

+0

我还为屏幕尺寸分别设计了一个5,7和10英寸的应用程序,为此我只使用简单的sw600dp和sw720dp –

0

根据定义

正常:筛分是相似大小的中密度HVGA 屏幕。正常屏幕的最小布局大小约为 320x470 dp单位。这种屏幕的例子有一种WQVGA低密度,中密度,高密度的WVGA。

但是,因为你的尺寸在PX表示,我们应该使用下面的公式,将它们转换为DP:

dp = 160 * (px/dpi) 

现在让我们考虑第一个:

  • 的Nexus 6P,1440x2560,密度Dpi:640

在这种情况下:

dp(x) = 160 * (1440/640) = 360 
dp(y) = 160 * (2560/640) = 640 

所以,这个设备可以被认为是“正常的”。

考虑第二个:

  • 银河S4迷你,4.3" 540x960与densityDpi:240

在这种情况下:

dp(x) = 160 * (540/240) = 360 
dp(y) = 160 * (960/240) = 640 

因此,该装置也可以是被认为是“正常的”(与第一个一模一样)

This意味着设备的实际尺寸基本上与您正在测试的每个设备相同。

所以,如果你想有一个更大的设备,也许你应该lessener的densityDpi

例如,如果我有这样的S4小(540x960)的设备,但与densityDpi:160将获得:

dp(x) = 160 * (540/160) = 540 
dp(y) = 160 * (960/160) = 960 

这应该对应于一个大型或x大型设备

+0

如何将其转换为布局文件夹,即,我如何为这3个例子使用不同的布局文件? –

+0

如上所述,我认为这些设备具有相同的尺寸。所以,我认为你需要配置一个合适的虚拟设备。 Lessener对这三种设备之一的分辨率将增加实际尺寸 – GVillani82

+0

好吧,这也发生在物理设备上。我的应用选择在Nexus 6P(1440x2560,518ppi)和Wiko GOA(320x480,165ppi)上使用正常布局,因此它不是AVD问题。 –