【问题标题】:android layout smallest width (sw800dp) and different densitiesandroid布局最小宽度(sw800dp)和不同的密度
【发布时间】:2012-09-06 19:55:03
【问题描述】:

如何在具有相同sw800dp最小宽度的ICS上放置不同dpi的不同资源?

详细信息:有两款采用 ICS 4.0.4 的平板电脑。第一个具有 1280x800 分辨率和 mdpi (160) 密度​​。第二个具有 1920x1200 分辨率和 hdpi (240) 密度​​。因此,就最小宽度而言,它们都具有相同的 sw800dp 限定符,但 mdpi/hdpi 密度限定符不同。

我需要为这两种分辨率设置不同的布局和图像。

于是我创建了两个目录:

布局-sw800dp-mdpi

布局-sw800dp-hdpi

我以为每个设备都会根据最小的宽度和密度来选择自己的目录。 但是它们都从同一个 sw800dp-hdpi 文件夹中获取资源!

我很困惑,不知道如何为这两种不同的分辨率分离资源。

非常感谢任何帮助。 提前致谢。

【问题讨论】:

  • 我对可绘制对象有同样的问题。 mdpi 设备正在从 drawable-sw720dp-xhdpi 获取资源
  • Mark Murphy 在 Google 错误跟踪器中注册了一个关于此案例的错误,但没有得到 goo-guys 的任何反应。这是链接:code.google.com/p/android/issues/detail?id=37187
  • @NorthernCaptain 我遇到了同样的问题,你有解决办法吗?
  • @AbdulSalamAli 不,当时这是一个 Android 错误。我改变了我的逻辑并以编程方式进行了更改(将所有内容设置在一个布局中,并将 setVisibility 设置为我需要的那个)。谷歌大佬说4.1+已经修复了,我没查。

标签: android layout


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    用它来获得密度:

    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 会自己完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多