11

是否可以以编程方式更改资源配置限定符?我的意思是,某些 hdpi 设备的系统从 xhdpi 文件夹而不是 hdpi 获取资源。

4

5 回答 5

1

在我的项目中,我有 ldpi、mdpi、hdpi 和 xhdpi 图像资源。对于 Kindle fire(1024 x 600 - 169 dpi) android 系统从 mdpi 文件夹中获取资源,应用程序看起来很糟糕。我想让 android 从 hdpi 文件夹中获取资源。

与您的评论相关,我通常只为 hdpi 屏幕提供资源,所有其他密度都可以正常工作。在我通常针对的 2.1+ 或 2.2+ 设备上进行测试!

我理解没有记录的风险,所以它不应该工作,尽管它可以工作!这样我就避免了我最终 apk 中的一些 KB。

但我不建议使用 xhdpi 代替 hdpi,因为 xhdpi 仅适用于 3+ 或其他设备。

只是为了在单个设备上测试不同的密度,您可以通过以下方式更改 AVD:

am display-density 480 

有关更多信息,请参阅 android 文档:http: //developer.android.com/tools/help/adb.html#shellcommands

于 2013-03-12T20:40:16.323 回答
0

Kindle 屏幕大但密度中等

它从res/layout-large/your.xml 获取布局

但是来自res/drawable/mdpi的图像, 所以只需创建一个名为res/drawable/mdpi-large的文件夹

希望这对你有用,但图像必须符合 Kindle 的分辨率

于 2012-12-17T05:27:45.797 回答
0

试试这个代码。希望能帮助到你。

    import android.util.DisplayMetrics;

    private int result = 0;  //Activity member

    public void determineDeviceResolution {

    switch(metrics.densityDpi)
    {      
        case DisplayMetrics.DENSITY_LOW: 
        {
            result = DisplayMetrics.DENSITY_LOW;
            break;
        }

        case DisplayMetrics.DENSITY_MEDIUM: 
        {
            result = DisplayMetrics.DENSITY_MEDIUM;
            break;
        }

        case DisplayMetrics.DENSITY_HIGH: 
        {
            result = DisplayMetrics.DENSITY_HIGH;
            break;  
        }

        default:
            break;          
    } 

   }


    private Drawable getDrawable(String icon) { 

    //Pass file name of the resource file 
    //while invoking this method for e.g. play_icon.png 


    //You can specify the folder from which resource
    //needs to be picked for e.g. drawable_hd,drawable_xhdpi etc..

   Drawable drawable = null;

    if(result == DisplayMetrics.DENSITY_HIGH)
    {

                drawable=create_drawable("/drawable_hd/" + icon);

    }

    else
    {
            drawable=create_drawable("/drawable/" + icon);
    }

    return drawable;
}



    Drawable create_drawable(String absolute_filepath)
{
    InputStream in = null; 

    Bitmap bMap = null; 

    BufferedInputStream buf = null;

            Drawable d = null;

    try 
    {
        in  = getClass().getResourceAsStream(absolute_filepath);
        buf = new BufferedInputStream(in);
        bMap = BitmapFactory.decodeStream(buf);

        if(in == null || buf == null || bMap== null)
        {
            return null;
        }

        if (in != null) 
        {
            in.close();
        }

        if (buf != null) 
        {
            buf.close();
        }

    } 

    catch (Exception e) 
    {
       e.printStackTrace();
    }


    d  = new BitmapDrawable(bMap);

    return d; 

}

最后,您可以将可绘制对象传递给 UI 元素的 setBackgroundDrawable() 方法。

于 2013-04-17T16:38:12.033 回答
0

我不确定你是否可以。不要误会我的意思:我个人也想知道这个问题的答案。你到底想做什么?

如果您无论如何都要以编程方式做事,最好将资产放入直接可绘制对象中,然后应用缩放。你可以很容易地得到密度乘数

于 2012-09-20T18:40:12.260 回答
0

您还可以为设备的宽度和其他属性自定义资源。阅读:http: //developer.android.com/guide/practices/screens_support.html

于 2013-04-25T23:12:31.660 回答