有人可以解释Android限定符的工作原理吗?

时间:2013-02-23 11:00:39

标签: android resources ratingbar

我对android限定符感到困惑。

我想为RatingBar创建自定义设计。所以我创建了rating_bar.xml文件并将其放到drawable文件夹中。这是来源:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background" android:drawable="@drawable/star_off"/>
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/star_on"/>
    <item android:id="@android:id/progress" android:drawable="@drawable/star_on"/>
</layer-list>

我只为xhdpi显示器设计了明星设计。我想如果我将star_on和star_off图像放到drawable-xhdpi文件夹中,那么所有不同密度(mdpi和hdpi)的所有内容都将自动调整大小。是的,它重新调整大小,但我得到了一些hdpi和mdpi的文物。与此处相同:Android custom RatingBar image artifacts 我尝试了那里描述的解决方案,但没有任何帮助。在xhdpi设备上我没有工件,但在mdpi和hdpi设备上有工件。

然后我决定将star_on和star_off图像放到drawable-nodpi文件夹中。所以我得到了很好的结果,没有任何xhdpi和hdpi屏幕的文物,但对于mdpi屏幕图像太大了。

然后我决定将star_on和star_off图像复制到drawable-mdpi文件夹并减小图像大小。它也没有帮助。

然后我将大星图像放到xhdpi和hdpi文件夹中,并将小星图像放到mdpi文件夹中。我想如果我在mdpi设备上运行我的应用程序将选择来自drawable-mdpi的图像。但似乎Android从hdpi或xhdpi文件夹中选择图像并自动缩放它们以用于mdpi屏幕,因为我再次拥有工件。我还尝试将小图像放到可绘制的文件夹中。它也没有帮助。

那么Android如何选择资源?我想如果我有资源шт可绘制,drawable-mdpi,drawable-hdpi和drawable-xhdpi比Android尝试在文件夹中找到与设备密度相同的资源。如果没有这样的资源,那么它可以从drawable文件夹中获取。

2 个答案:

答案 0 :(得分:3)

This Developers guide part解释了我猜你需要什么。它用一个例子来说明:

  

为了演示Android如何选择替代资源,请假设   以下可绘制目录每个包含不同版本的   相同的图片:

drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
  

并假设以下是设备配置:

Locale = en-GB 
Screen orientation = port 
Screen pixel density = hdpi 
Touchscreen type = notouch 
Primary text input method = 12key
  

通过将设备配置与可用替代方案进行比较   资源,Android从

中选择drawables

<强> drawable-en-port

还有一个描述 android如何选择限定符的选择图。

答案 1 :(得分:2)

android根据 dpi

从可绘制文件夹中选择资源

有四种屏幕密度

  1. ldpi
  2. MDPI
  3. HDPI
  4. xhdpi
  5. 四种屏幕尺寸

    layout-small
    layout-nomal
    layout-large
    layout-xlarge
    

    小屏幕尺寸= 2.2“ - 2.7”(约)

    正常屏幕尺寸= 3.0“ - 4.7”(约)

    大屏幕尺寸= 5“ - 7”(约)

    xlarge屏幕尺寸= 7“&gt;(约)

    ldpi = 120dpi

    mdpi = 160dpi

    hdpi 240dpi

    xhdpi = 320dpi

    根据这些密度和屏幕尺寸创建您的avd,然后检查结果