Android以编程方式更改资源限定符

时间:2012-09-17 20:12:13

标签: android

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

5 个答案:

答案 0 :(得分: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 doc:http://developer.android.com/tools/help/adb.html#shellcommands

答案 1 :(得分:0)

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

如果你打算以编程方式做事,最好将资产放入直线绘图,然后应用缩放。你可以很容易地得到密度乘数

答案 2 :(得分:0)

Kindle有大屏幕,但中等密度

它采用 res / layout-large / your.xml

的布局

但来自 res / drawable / mdpi 的图片只需创建一个名为 res / drawable / mdpi-large

的文件夹

希望这对您有用,但图片必须符合kindle的分辨率

答案 3 :(得分: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; 

}

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

答案 4 :(得分:0)

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