2012-09-17 88 views
11

是否有可能以編程方式更改資源配置限定符? 我的意思是,使一些hdpi設備的系統從xhdpi文件夾中取代hdpi資源。以編程方式Android更改資源限定符

+0

我要出去在這裏的肢體,並說「你不想要這個」。這是一個有趣的老野獸資源的選擇,尤其是當試圖支持前後的Android 3.1。 – OceanLife

回答

0

我不確定你是否可以。不要誤會我的意思:我個人也想知道這個答案。你到底想做什麼?

如果您要以編程方式執行任何操作,最好將資產放在可繪製的直線上,然後應用縮放比例。你可以得到事半功倍的密度很容易地

+0

感謝您的回覆。 在我的項目中,我有ldpi,mdpi,hdpi和xhdpi圖像資源。對於Kindle Fire(1024 x 600 - 169 dpi),android系統從mdpi文件夾獲取資源,應用程序看起來非常糟糕。我想讓android從hdpi文件夾中獲取資源。 – Yomodo

0

的Kindle擁有超大屏幕,但是與中密度

它需要佈局從RES /佈局大/ your.xml

但是從清晰度圖像/繪製/ MDPI所以只需創建一個名爲RES /繪製/ MDPI大型

希望這會爲你工作文件夾,但圖像一定要按照Kindle的分辨率

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

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()方法。

相關問題