Android布局最小宽度(sw800dp)和不同的像素密度

5
如何在ICS上使用相同的sw800dp最小宽度为不同dpi放置不同的资源?
详情:有两个ICS 4.0.4平板电脑。第一个具有1280x800分辨率和mdpi(160)密度。第二个具有1920x1200分辨率和hdpi(240)密度。因此,就最小宽度而言,它们都具有相同的sw800dp限定符,但具有不同的mdpi/hdpi密度限定符。
我需要为这两种分辨率制作不同的布局和图像。
因此,我创建了两个目录: layout-sw800dp-mdpi layout-sw800dp-hdpi
我认为每个设备将根据最小宽度和密度选择自己的目录。但是,它们都从相同的sw800dp-hdpi文件夹中获取资源!
我很困惑,不知道如何为这两种不同的分辨率分离资源。
非常感谢任何帮助。提前致谢。

我在drawable方面遇到了相同的问题。mdpi设备从drawable-sw720dp-xhdpi获取资源。 - arjoan
Mark Murphy在Google bugtracker上注册了一个关于这个问题的bug,但是没有得到goo-guys的任何反应。这是链接:http://code.google.com/p/android/issues/detail?id=37187 - Northern Captain
@NorthernCaptain,我也遇到了同样的问题,你有找到解决方案吗? - A.s.ALI
@AbdulSalamAli 不,那时这是一个Android的bug。我改变了我的逻辑并对其进行了编程更改(将所有内容设置在一个布局中,并设置所需的可见性)。谷歌的人说在4.1+中已经修复了,但我没有检查过。 - Northern Captain
2个回答

2

您应该使用位于/layout/sw800dp的相同布局,并创建/drawable-mdpi,/drawable-hdpi来放置自定义可绘制对象,系统将对每个设备应用正确的可绘制对象,使用相同的布局。这些设备应该具有相似的大小和纵横比...


1

使用此代码获取密度:

float density = getBaseContext().getResources().getDisplayMetrics().density;

屏幕高度:

int h = 0;

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

h = (int) display.getHeight();

屏幕宽度:

int w = 0;

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

w = (int) display.getWidth()

然后只需选择正确的资源。


谢谢,我知道如何通过编程方式获取显示配置,但是我该如何更改布局加载行为?当我调用setContentView时,Android会自己处理。 - Northern Captain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接