Java Android使用了错误的布局?

Java Android使用了错误的布局?,java,android,android-layout,layout,Java,Android,Android Layout,Layout,我需要为不同的手机创建不同的布局 我检查了3部手机和屏幕尺寸: SONY XPERIA Z: 08-30 09:04:05.258 1008-1008/pl.graphicbox.polamp I/LAYOUT: widthPixels = 1080 08-30 09:04:05.258 1008-1008/pl.graphicbox.polamp I/LAYOUT: heightPixels = 1776 08-30 09:04:05.258 1008-1008/pl.graphicbox.

我需要为不同的手机创建不同的布局

我检查了3部手机和屏幕尺寸:

SONY XPERIA Z:
08-30 09:04:05.258 1008-1008/pl.graphicbox.polamp I/LAYOUT: widthPixels  = 1080
08-30 09:04:05.258 1008-1008/pl.graphicbox.polamp I/LAYOUT: heightPixels = 1776
08-30 09:04:05.258 1008-1008/pl.graphicbox.polamp I/LAYOUT: densityDpi   = 480
08-30 09:04:05.258 1008-1008/pl.graphicbox.polamp I/LAYOUT: xdpi         = 442.451
08-30 09:04:05.258 1008-1008/pl.graphicbox.polamp I/LAYOUT: ydpi         = 443.345

Samsung s3:
08-30 09:05:00.179 21820-21820/pl.graphicbox.polamp I/LAYOUT: widthPixels  = 480
08-30 09:05:00.179 21820-21820/pl.graphicbox.polamp I/LAYOUT: heightPixels = 800
08-30 09:05:00.179 21820-21820/pl.graphicbox.polamp I/LAYOUT: densityDpi   = 240
08-30 09:05:00.179 21820-21820/pl.graphicbox.polamp I/LAYOUT: xdpi         = 234.0
08-30 09:05:00.179 21820-21820/pl.graphicbox.polamp I/LAYOUT: ydpi         = 236.0

Sony xperia M
08-30 09:08:25.964 5391-5391/pl.graphicbox.polamp I/LAYOUT: widthPixels  = 720
08-30 09:08:25.964 5391-5391/pl.graphicbox.polamp I/LAYOUT: heightPixels = 1184
08-30 09:08:25.964 5391-5391/pl.graphicbox.polamp I/LAYOUT: densityDpi   = 320
08-30 09:08:25.964 5391-5391/pl.graphicbox.polamp I/LAYOUT: xdpi         = 345.056
08-30 09:08:25.964 5391-5391/pl.graphicbox.polamp I/LAYOUT: ydpi         = 342.231
我创建了3个布局:

layout-sw200dp
layout-sw300dp
layout-sw400dp
但所有手机都使用相同的布局——sw300dp

有人能解释一下我做错了什么以及如何修复吗。
Thx.

看起来所有手机的宽度都在300到400 dp之间,当它们使用sw300dp时,这是正确的。 要进行检查,请将
dpWidth
添加到日志中:

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);

float density  = getResources().getDisplayMetrics().density;
float dpWidth  = outMetrics.widthPixels / density;

看起来所有手机的宽度都在300到400 dp之间,这是正确的,当他们使用sw300dp时。 要进行检查,请将
dpWidth
添加到日志中:

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);

float density  = getResources().getDisplayMetrics().density;
float dpWidth  = outMetrics.widthPixels / density;

检查我的编辑,我做到了。检查我的编辑,我忘了添加一行代码检查我的编辑,我做到了。检查我的编辑,我忘了添加一行代码是的,你是对的。所有设备均为320和360。。但索尼M和索尼Z有360宽dp。。但是屏幕大小是不同的。。现在怎么办?@Esperanz0,不幸的是Android就是这样工作的。dp不是一个精确的单位。我们的目标是使应用程序的布局具有最接近屏幕大小的通用性,因此它在5.2英寸和4.7英寸的设备上看起来都不错。如果你在这方面有问题,你应该提出一个新问题,并描述为什么你想为这样一个相似的设备使用3种不同的布局。我想创建不同的布局,因为在Sony M上,布局看起来不错。。但在索尼Z文本是多行而不是单行等。。。这就是为什么我想为…@Esperanz0创建自己的布局,你们应该在新问题中发布你们的布局和设备截图。我敢肯定,还有另一种,
正确的
方法可以解决你的问题是的,你是对的。所有设备均为320和360。。但索尼M和索尼Z有360宽dp。。但是屏幕大小是不同的。。现在怎么办?@Esperanz0,不幸的是Android就是这样工作的。dp不是一个精确的单位。我们的目标是使应用程序的布局具有最接近屏幕大小的通用性,因此它在5.2英寸和4.7英寸的设备上看起来都不错。如果你在这方面有问题,你应该提出一个新问题,并描述为什么你想为这样一个相似的设备使用3种不同的布局。我想创建不同的布局,因为在Sony M上,布局看起来不错。。但在索尼Z文本是多行而不是单行等。。。这就是为什么我想为…@Esperanz0创建自己的布局,你们应该在新问题中发布你们的布局和设备截图。我相信,还有另一种,
正确的
方法可以解决您的问题