欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android加載Assets目錄中Xml布局文件

 更新時(shí)間:2018年12月21日 11:07:11   作者:ImTryCatchException  
這篇文章主要為大家詳細(xì)介紹了Android加載Assets目錄中Xml布局文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近由于項(xiàng)目開(kāi)發(fā)使用到了動(dòng)態(tài)布局,因?yàn)榇虬黶dk ,sdk 這塊activity 需要一些layout 文件 。而做過(guò)sdk 開(kāi)發(fā)的小伙伴應(yīng)該知道,layout 文件是不能打包到j(luò)ar 中的。當(dāng)然了aar 除外。由于項(xiàng)目使用的還是jar包,所以怎么解決layout文件是個(gè)問(wèn)題,一開(kāi)始想到的辦法就是把layout 文件發(fā)給客戶。但是這種方法顯然不太合適后來(lái)就發(fā)現(xiàn)了Android 其實(shí)提供了一個(gè)方法可以加載xml布局文件,就是使用inflate(XmlPullParser parser, ViewGroup root)這個(gè)方法,網(wǎng)上找了大批的文章,其中還是找到了兩篇簡(jiǎn)單描寫了下這個(gè)解析的過(guò)程但是在使用過(guò)程中還是出現(xiàn)了幾個(gè)問(wèn)題 :

1 如何拿到XmlPullParser 對(duì)象

拿到這個(gè)對(duì)象倒是不難我們通過(guò) AssetsManger 就可以輕易獲取XmlResourceParser openXmlResourceParser(String fileName)
但是注意這里有個(gè)問(wèn)題就是filename 要加上”assets\”前綴不然會(huì)報(bào) FileNotFound異常

2 發(fā)現(xiàn)解析不了xml 布局文件

openxmlresourceparser 方法報(bào)錯(cuò),為什么呢。查到資料是因?yàn)檫@個(gè)方法只能解析編譯后的xml文件,那么什么事編譯后的xml文件,就是生成的apk 解壓后 拿到的xml就是編譯后的。所以我們放在assets 中的xml 都要是編譯后的文件。目前還沒(méi)有找到Android有別的工具可以專門編譯xml 文件

3 解析到了view 如何拿到里面的子view 通過(guò)id 不行啊

這是肯定的不是在layout文件夾下的不會(huì)有id 索引所以你不能通過(guò)id 來(lái)find 。那么如何拿到子view ,后來(lái)發(fā)現(xiàn)了有人解決這個(gè)問(wèn)題就是通過(guò)findViewWithTag 這個(gè)方法可以通過(guò)xml view 下配置的tag 來(lái)獲取

以上問(wèn)題解決后就完美拿到了xml 的布局view 文件 可以動(dòng)態(tài)設(shè)置給activity了。下面我把源碼貼上來(lái)需要的朋友可以參考下。

import android.content.Context;
import android.content.res.AssetManager;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created by yuge on 2017/11/8.
 */

public class AssetsViewHelper {
 private static Context mcontext;
 private static AssetsViewHelper assetsViewHelper;
 /**
  * assets 目錄前綴
  */
 private static String assetsFile="assets/";
 private AssetsViewHelper(){
 }


 public static AssetsViewHelper width(Context context){
  mcontext=context.getApplicationContext();
  if(assetsViewHelper==null){
    synchronized (AssetsViewHelper.class){
     if(assetsViewHelper==null){
      assetsViewHelper=new AssetsViewHelper();
     }
    }
  }
  return assetsViewHelper;
 }

 /**
  * 獲取layout方法
  * @param filename
  * @return
  */
 public View getAssetsLayout(String filename) {
  AssetManager am = mcontext.getResources().getAssets();
  try {
    XmlResourceParser parser = am.openXmlResourceParser(assetsFile + "activity_main.xml");
    LayoutInflater inflater = (LayoutInflater) mcontext.getSystemService(mcontext.LAYOUT_INFLATER_SERVICE);
    View inflate = inflater.inflate(parser, null);
    return inflate;
   } catch (IOException e) {
    e.printStackTrace();
    return null;
   }
 }
  /**
   * 根據(jù) tag 獲取 view 對(duì)象
   * @param viewGroup 父容器也就是activity的根布局
   * @param tag
   * @return
   */
 public View getViewByTag(View viewGroup,Object tag){
  return viewGroup.findViewWithTag(object);
 }

 /**
  * 獲取assets 中圖片的方法
  * @param fileName
  * @return
  */
  Bitmap getImageFromAssetsFile(String fileName)
 {
  Bitmap image = null;
  AssetManager am = mcontext.getResources().getAssets();
  try
  {
   InputStream is = am.open(assetsFile+fileName);
   image = BitmapFactory.decodeStream(is);
   is.close();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }

  return image;

 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • AndroidQ(10)黑暗模式適配的實(shí)現(xiàn)

    AndroidQ(10)黑暗模式適配的實(shí)現(xiàn)

    這篇文章主要介紹了AndroidQ(10)黑暗模式適配的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Windows下搭建Flutter開(kāi)發(fā)環(huán)境

    Windows下搭建Flutter開(kāi)發(fā)環(huán)境

    這篇文章介紹了Windows下搭建Flutter開(kāi)發(fā)環(huán)境的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 怎么發(fā)布打包并發(fā)布自己的Android應(yīng)用(APP)

    怎么發(fā)布打包并發(fā)布自己的Android應(yīng)用(APP)

    前面我為大家講的都是關(guān)于Android開(kāi)發(fā)方面的知識(shí)點(diǎn)和技術(shù),不少朋友可能會(huì)感到疑惑--究竟我該怎么打包、發(fā)布自己開(kāi)發(fā)的APP,怎樣將我的APP放到網(wǎng)上工別人下載,怎樣保證我的APP安全及版權(quán)問(wèn)題呢
    2013-11-11
  • Android左右滑出菜單實(shí)例分析

    Android左右滑出菜單實(shí)例分析

    想在首頁(yè)加個(gè)從左滑動(dòng)出來(lái)的菜單,我查閱網(wǎng)上資料,并自己摸索,實(shí)現(xiàn)了左、右兩邊都能滑出菜單,并且,左、右菜單中,都可以加ListView等這類需要解決GestureDetector沖突的問(wèn)題
    2013-06-06
  • Android編程圖片加載類ImageLoader定義與用法實(shí)例分析

    Android編程圖片加載類ImageLoader定義與用法實(shí)例分析

    這篇文章主要介紹了Android編程圖片加載類ImageLoader定義與用法,結(jié)合實(shí)例形式分析了Android圖片加載類ImageLoader的功能、定義、使用方法及相關(guān)操作注意事項(xiàng),代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下
    2017-12-12
  • Flutter 包管理器和資源管理使用學(xué)習(xí)

    Flutter 包管理器和資源管理使用學(xué)習(xí)

    這篇文章主要為大家介紹了Flutter 包管理器和資源管理使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 詳解Android?Flutter如何使用相機(jī)實(shí)現(xiàn)拍攝照片

    詳解Android?Flutter如何使用相機(jī)實(shí)現(xiàn)拍攝照片

    在app中使用相機(jī)肯定是再平常不過(guò)的一項(xiàng)事情了,相機(jī)肯定涉及到了底層原生代碼的調(diào)用,那么在flutter中如何快速簡(jiǎn)單的使用上相機(jī)的功能呢?一起來(lái)看看吧
    2023-04-04
  • Android性能優(yōu)化之利用Rxlifecycle解決RxJava內(nèi)存泄漏詳解

    Android性能優(yōu)化之利用Rxlifecycle解決RxJava內(nèi)存泄漏詳解

    RxJava作為一種響應(yīng)式編程框架,是目前編程界網(wǎng)紅,可謂是家喻戶曉,其簡(jiǎn)潔的編碼風(fēng)格、易用易讀的鏈?zhǔn)椒椒ㄕ{(diào)用、強(qiáng)大的異步支持等使得RxJava被廣泛使用。
    2017-01-01
  • Android如何獲取子View的位置及坐標(biāo)詳解

    Android如何獲取子View的位置及坐標(biāo)詳解

    這篇文章主要給大家介紹了關(guān)于Android如何獲取子View的位置及坐標(biāo)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Android開(kāi)發(fā)之電話撥號(hào)器實(shí)例詳解

    Android開(kāi)發(fā)之電話撥號(hào)器實(shí)例詳解

    這篇文章主要介紹了Android開(kāi)發(fā)之電話撥號(hào)器,結(jié)合實(shí)例形式詳細(xì)分析了Android電話撥號(hào)器的實(shí)現(xiàn)步驟與具體代碼,并附帶了一個(gè)Android開(kāi)放電話撥號(hào)器的學(xué)習(xí)筆記,需要的朋友可以參考下
    2015-12-12

最新評(píng)論