Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android進階:打jar包獲取assets中的資源 解決selector XML文件不能解析的問題

Android進階:打jar包獲取assets中的資源 解決selector XML文件不能解析的問題

編輯:Android開發實例

大家都知道Android項目中的res目錄中的資源eclipse插件會在gen中自動生成相應的id應用,這樣就統一了資源管理


那麼這種自動生成的id就是寫死的東西了 這就導致了不容易做修改 


項目中需要將現有的組件打成jar包 這樣打包後類文件當然是肯定沒問題 但是資源文件就不行了。這個地方的id不能在新建的項目中被應用了


所以資源文件不能被打到res目錄中,這種情況下就必須要打到assets目錄中


這樣就會出現問題了 一般情況下我們應用資源文件是通過int型的id來引用的, 這裡就不能直接應用了 我們需要手動讀取Assert目錄下的資源


Android提供了AssetManager來管理資源

 

讀取就很簡單了只需要 在Acitivity中

 

Context.getAssets().open(“sample.png”)

 

可以直接獲取相應的Inpustream 根據需要可以通過包裝來獲得需要的流 來解析一些XML TXT等文件

 

獲得Bitmap :  BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomout.png"))

 

獲得Drawable:new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomout.png")))

 

一般我們用到Button的時候會使用selector來得到一些點擊(pressed)、焦點(focused)的一些效果,但當把selector的XML文件放到Assert文件中後 我試了N種的方法包括反射都用上了。發現都是解析不了 看源碼也沒找到具體什麼原因 始終找不到為什麼StateListDrawable 不能解析出來,


實在沒辦法了。。但問題還是得解決啊。 換了個思路


既然XML類型的StateListDrawable解析不了 我可以手動創建一個StateListDrawable對象啊,這個真是簡單啊

 

白白花了那麼多時間去看源碼試方法鑽牛角尖,換了個角度才豁然開朗,

 

 

  1. normalzoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")));  
  2. selectedzoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin1.png")));  
  3. disablezoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin2.png")));  
  4. StateListDrawable bgzoomin = new StateListDrawable();  
  5. bgzoomin.addState(View.PRESSED_ENABLED_STATE_SET, selectedzoomin);  
  6. bgzoomin.addState(View.ENABLED_FOCUSED_STATE_SET, selectedzoomin);  
  7. bgzoomin.addState(View.ENABLED_STATE_SET, normalzoomin);  
  8. bgzoomin.addState(View.FOCUSED_STATE_SET, selectedzoomin);  
  9. bgzoomin.addState(View.EMPTY_STATE_SET, disablezoomin);  
  10. btnZoomIn.setBackgroundDrawable(bgzoomin);  
  11. btnZoomIn.setMinimumWidth(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")).getWidth());  
  12. btnZoomIn.setMinimumHeight(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")).getHeight()); 

 

這樣就實現功能了,還有就是要注意最後要關閉流 這個最好是統一管理起來,


 

 

上面是打jar包時的文件目錄 需要選擇java代碼 然後和assets目錄 像gen和res就不要打到包裡了,當然manifest這些文件也不能打包

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved