1. 程式人生 > >Android 載入Assets目錄中Xml佈局檔案

Android 載入Assets目錄中Xml佈局檔案

  最近由於專案開發使用到了動態佈局,因為打包sdk ,sdk 這塊activity 需要一些layout 檔案 。而做過sdk 開發的小夥伴應該知道,layout 檔案是不能打包到jar 中的。當然了aar 除外。由於專案使用的還是jar包,所以怎麼解決layout檔案是個問題,一開始想到的辦法就是把layout 檔案發給客戶。但是這種方法顯然不太合適後來就發現了Android 其實提供了一個方法可以載入xml佈局檔案
   就是使用inflate(XmlPullParser parser, ViewGroup root)這個方法,網上找了大批的文章,其中還是找到了兩篇簡單描寫了下這個解析的過程但是在使用過程中還是出現了幾個問題
  1 如何拿到XmlPullParser 物件
拿到這個物件倒是不難我們通過 AssetsManger 就可以輕易獲取XmlResourceParser openXmlResourceParser(String fileName)


但是注意這裡有個問題就是filename 要加上”assets\”字首不然會報 FileNotFound異常
  2 發現解析不了xml 佈局檔案
openxmlresourceparser 方法報錯,為什麼呢。查到資料是因為這個方法只能解析編譯後的xml檔案,那麼什麼事編譯後的xml檔案,就是生成的apk 解壓後 拿到的xml就是編譯後的。所以我們放在assets 中的xml 都要是編譯後的檔案。目前還沒有找到Android有別的工具可以專門編譯xml 檔案
  3 解析到了view 如何拿到裡面的子view 通過id 不行啊
這是肯定的不是在layout資料夾下的不會有id 索引所以你不能通過id 來find 。那麼如何拿到子view ,後來發現了有人解決這個問題就是通過findViewWithTag
這個方法可以通過xml view 下配置的tag 來獲取
  以上問題解決後就完美拿到了xml 的佈局view 檔案 可以動態設定給activity了。下面我把原始碼貼上來需要的朋友可以參考下。

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; } } /** * 根據 tag 獲取 view 物件 * @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; } }

相關推薦

Android 載入Assets目錄Xml佈局檔案

  最近由於專案開發使用到了動態佈局,因為打包sdk ,sdk 這塊activity 需要一些layout 檔案 。而做過sdk 開發的小夥伴應該知道,layout 檔案是不能打包到jar 中的。當然了aar 除外。由於專案使用的還是jar包,所以怎麼解決lay

Androidxml佈局檔案使用include引入佈局進行復用(解決使用include佈局重疊,顏色設定無效問題)

使用include引入佈局的作用   提取重複的佈局程式碼,方便進行復用 如何使用   比如我們想要線上性佈局中建立三塊需要複用的佈局headview、centerview、butto

Android 解析assets目錄下的json檔案

Context test_Context = null;         String test_package = packageName;             try             {                             test_Co

Android效能優化之:XML佈局檔案優化

Android中XML佈局檔案的使用非常頻繁,在載入XML佈局的時候,如果對XML檔案其進行優化,將會提高載入的效率。 HierarchyViewer工具 再開始介紹之前先說一下HierarchyViewer工具的使用。 不合理的佈局會使我們的應用程式

解決Android studio無法預覽xml佈局檔案的問題

xml檔案中 xmlns:android="http://schemas.android.com/apk/res/android"> 出現“URI is not registered”,eve

命令列執行Java程式載入指定目錄的Jar檔案

經常遇到需要新增第三方jar檔案的情況。在命令列狀態下要載入外部的jar檔案非常麻煩,很不好搞,在網上折騰了很久終於搞定了,在這裡做個筆記: 編譯:javac -Djava.ext.dirs=./lib Test.java執行:java -Djava.ext.dirs=./

AndroidXML佈局檔案,使用自定義屬性不提示和不生效

在XML檔案中使用首先要宣告 xmlns:toolbar=http://schemas.android.com/apk/res/cn.zzm.toolbar 注意,“toolbar”可以換成其他的任何名字,後面的url地址必須最後一部分必須用上自定義元件的包名。自定義屬性了

如何避免android layout.xml 佈局檔案重名id的錯誤

在android 開發中,用來描述檢視佈局的layout.xml檔案中,通常會涉及到控制元件或子佈局的變數命名問題,有的時候大家為了提編碼速度,可能會造成同名id的問題。那麼佈局檔案中的id是否可以同名呢? 分兩種情況: 同一個layout.xml中的id重名 不同la

android關於用.xml佈局檔案對View新增OnClick事件無法響應的事情

   最近在寫一個專案,用到了Fragment,於是在Fragment裡用用LayoutInflate映射了一個.xml的佈局檔案, mRootView = (ViewGroup) inflater.inflate(R.layout.luka_category_fragme

Androidmeasure過程、WRAP_CONTENT詳解以及xml佈局檔案解析流程淺析(上)

  繪製流程的三個步驟,即:                      1、  measure過程 --- 測量過程                      2、 layout 過程     --- 佈局過程                      3、 draw 過程

記錄Android開發一個小坑,佈局檔案TextView新增onClick後,點選無效問題

自己寫東西的時候,在TextView上添加了onClick去增加點選事件,去跳轉另一個Activity,執行後結果點選無效,新增Toast,Toast也不顯示,程式碼如下: <TextView android:layout_width="wrap_content"

ViewPager動態新增XML佈局檔案,並獲取XML檔案控制元件ID的操作(inflate)

Step 1: 佈局檔案中新增viewpager和切換頁面button <spanstyle="font-size:18px;"><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/a

Android獲取assets目錄下的檔案和圖片

      在android studio中預設不會像eclipse一樣自動新建assets檔案,首先將android studio的檢視切換到project下,src/man下直接新建檔案命名為assets即可。       1、獲取圖片 Bitmap bitmap = n

一個很好,很實用,學習android xml佈局檔案

用了各種佈局組合成一個漂亮的見面。新手很實用的一個例子,大家學習一下。。。。。。分享 本例用到了(相對佈局,線性佈局的各種巢狀使用) 效果圖片: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

Android讀取assets目錄下的資源 (webview載入assets下的html)

1。獲取資源的輸入流 資原始檔 sample.txt 位於 $PROJECT_HOME/assets/ 目錄下,可以在 Activity 中通過 Context.getAssets().open(“sample.txt”) 方法獲取輸入流。 注意:如果資原始檔是文字檔案

Android開發 讀取assets目錄下的txt檔案

/** * 讀取assets下的txt檔案,返回utf-8 String * @param context * @param fileName 不包括字尾 * @

eclipse新建Android專案無法顯示xml佈局檔案

今天使用eclipse新建Android專案後,編寫xml佈局檔案時想預覽一下效果, 結果無法顯示,並且報錯:The following classes could not be instantiat

Android Studio XML佈局檔案設定程式碼自動補齊快捷鍵

Android Studio XML佈局檔案中你會發現無法進行程式碼快捷鍵提示了,經過查詢發現: File -> Settings -> keymap  然後在收入框裡寫 Basic 我的是更改為Alt+反斜槓 然後右擊Basic的快捷鍵remove再新增你想

Android讀取assets目錄下所有檔案

package org.crazyit.image; import java.io.IOException; import java.io.InputStream; import android.app.Activity; import android.content.

android專案assets資料夾下的檔案複製到SD卡

<pre name="code" class="html">package com.lapel.activity.html; import java.io.File; import ja