2017-05-01 50 views
0

我在assets文件夾內有一個包含一些xml佈局(只是簡單形狀)的子文件夾。我的目標是能夠創建一個Drawable對象用作背景一個看法。目前它只是簡單的形狀,但最終會有很多。我不想使用資源區有幾個原因(沒有子文件夾,不需要硬編碼資源路徑等)。在Assets文件夾中創建xml文件中的Drawable

工作在圖像可繪製上的普通代碼返回null和xml文件。有沒有人有任何指導如何做到這一點?下面的代碼示例。

XML文件:用於讀取文件,非常類似於Java

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> 
    <stroke android:width="2dp" android:color="#c9c6af" /> 
    <solid android:color="#ffffffff" /> 
</shape> 

C#代碼。是的,我知道我需要關閉InputStream:

public static Drawable GetDrawableFromAsset(Context context, string filePath) 
    { 
     AssetManager assetManager = context.Assets; 

     Stream istr; 
     Drawable drawable = null; 
     try 
     { 
      istr = assetManager.Open(filePath); 
      drawable = Drawable.CreateFromStream(istr, null); 
     } 
     catch (IOException e) 
     { 
      // handle exception 
     } 

     return drawable; 
    } 

回答

0

事實證明,你不能因爲性能原因這樣做:

https://developer.android.com/reference/android/view/LayoutInflater.html

由於性能原因,查看通貨膨脹在很大程度上依賴於 在構建時完成對XML文件的預處理。因此, 目前不能在運行時通過普通XML文件使用LayoutInflater和XmlPullParser ;它只能與XmlPullParser 從編譯的資源返回(R.something文件。)

這涉及到使用XmlPullParser這是我不得不結束了試圖反正(一般爲從流創建不起作用什麼出於同樣的原因)。

相關問題