1. 程式人生 > >Android中的asserts和res/raw資源目錄

Android中的asserts和res/raw資源目錄

1、assets目錄

assets目錄下稱為原生檔案,無法通過R資源清單類訪問,這類檔案在被打包成apk檔案時是不會進行壓縮的;

(1)使用方法

AssetManager assets = this.getResources().getAssets();
((TextView)findViewById(R.id.txAssets)).setText(
    readStream(assets.open("data.txt"))
    );

在context上下文中,呼叫getAssets返回一個AssetManager物件,然後使用open方法就可以訪問需要的資源了,這裡open方法是以assets目錄為根的。

assets目錄更像一個附錄型別的目錄,Android不會為這個目錄中的檔案生成ID並儲存在R類當中,因此它與Android中的一些類和方法相容度更低。同時,由於你需要一個字串路徑來獲取這個目錄下的檔案描述符,訪問的速度會更慢。但是把一些檔案放在這個目錄下會使一些操作更加方便,比方說拷貝一個數據庫檔案到系統記憶體中。要注意的是,你無法在Android XML檔案中引用到assets目錄下的檔案,只能通過AssetManager來訪問這些檔案。資料庫檔案和遊戲資料等放在這個目錄下是比較合適的。這個目錄中的檔案也不會被編譯成二進位制形式,可以自建目錄。

2、res目錄

res目錄下這類檔案在打包成apk檔案時,可通過R資源清單類訪問,會進行小記憶體優化。

res/raw目錄這裡的檔案會原封不動的儲存到裝置上,不會被編譯為二進位制形式,訪問的方式通過R類。由於raw是Resources (res)的子目錄,Android會自動的為這目錄中的所有資原始檔生成一個ID,這個ID會被儲存在R類當中,作為一個檔案的引用。這意味著這個資原始檔可以很容易的被Android的類和方法訪問到,甚至在Android XML檔案中你也可以@raw/的形式引用到它。在Android中,使用ID是訪問一個檔案最快捷的方式。MP3和Ogg檔案放在這個目錄下是比較合適的。不可以有目錄結構。

(1)使用方法

InputStream is =getResources().openRawResource(R.id.filename);

try
{ ByteArrayOutputStream bo = new ByteArrayOutputStream(); int i = is.read(); while(i != -1) { bo.write(i); i = is.read(); } return bo.toString(); } catch (IOException e) { return ""; }

通過openRawResource(R.id.filename);方法獲取一個指定id的輸入流.

還有一些其他資料夾:

res/anim:這裡存放的是動畫資源。

res/xml:可以在Activity中使用getResource().getXML()讀取這裡的資原始檔,但是XML會被編譯成二機制檔案。

相關推薦

Androidassertsres/raw資源目錄

1、assets目錄 assets目錄下稱為原生檔案,無法通過R資源清單類訪問,這類檔案在被打包成apk檔案時是不會進行壓縮的; (1)使用方法 AssetManager assets = this.getResources().getAssets

android開發如何獲取res/rawassets資料夾的路徑:

1.如果你只是拷貝動作,那麼你只需要得到res/raw和assets檔案輸入流就可以,方法如下:     獲取res/raw檔案輸入流:  InputStream is=getResources().

AndroidgetDrawablegetColor過時的替代方法

this logs con 知識 log launcher 16px ase spa 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 前言 Android SDK 升級到 23 之後,getDrawable和getColor方法提示過時。 解決方案 getRe

Android BitmapDrawable相互轉換的方法

canvas board null height .com factory oar tool pla 1、Drawable --> Bitmap [java] view plain copy Bitmap drawable2Bitmap(Drawabl

AndroidGalleryImageSwitcher同步自動(滾動)播放圖片庫

目標 art trac repl otto fin instance img com 本文主要內容是如何讓Gallery和ImageSwitcher控件能夠同步自動播放圖片集 ,看起來較難,然而,實現的方法非常簡單, 請跟我慢慢來。總的來說,本文要實現的效果如下圖:(截

AndroidRelativeLayoutLinearLayout性能分析

ant 顯示 二次 iou other comm 排列 vertica 簡單的 先看一些現象吧:用eclipse或者Android studio,新建一個Activity自動生成的布局文件都是RelativeLayout,或許你會認為這是IDE的默認設置問題,其實不然,

AndroidServiceIntentService的差別

前言: ServiceTimeout(20 seconds)小概率型別Service在特定的時間內無法處理完成,會造成ANR — 應用程式無響應(ANR:Application Not Responding)的情況 ▲ 分析 : 避免ANR最核心的一點就是在主執行緒減少耗時操作。這時我們

AndroidSerializableParcelable序列化物件詳解

學習內容: 1.序列化的目的 2.Android中序列化的兩種方式 3.Parcelable與Serializable的效能比較 4.Android中如何使用Parcelable進行序列化操作 5.Parcelable的工作原理 6.相關例項   1.序列化

Android srcbackground的區別

XML屬性中src和background的區別: src會存放原圖的大小,background會根據view的大小拉伸整張圖片。src是前景而background是背景。 可以使用scaleType屬性設定src(只對src起作用)的縮放方式。 詳細的scaleType說明: CEN

Androidactivityxml的第一個專案

我們使用的手機不光是隻用到一個應用程式,比如在淘寶介面要付款的時候可能會啟動微信付款等,這就相當於在淘寶的Activity中啟動了微信的Activity。還比如說當我們註冊一個網站是,可能會給自己傳送一條簡訊作為驗證,這就是在當前的Activity中啟動了簡訊的Activity。之前對比的MVC設

AndroidPaintCanvas的簡單使用

在 Android 中,Canvas 相當於畫布,而 Paint 相當於畫筆;那麼這兩個配合使用就可以畫出來我們想要的形狀了。 首先我們新建一個類,名字叫 MyView,重寫 onDraw() 方法,程式碼如下: @SuppressLint("AppCompatCustomView") pu

android IMEIICCID的校驗位計算

        我們都知道在android 中有IMEI和ICCID 這兩項資料. 至於這兩項資料的獲取方式以及所表示的意思在此我就不寫了.主要講講這兩項資料最後一位的校驗位如何計算的.         IMEI共1

Android-0.AndroidminsdkversiontargetSdkVersion的選擇

問題 在呼叫系統播放mp4時,程式碼如下: private void viewMediaFile(String path) { if (!TextUtils.isEmpty(path)) { String type =

androidstagefrightOMXCodec原理分析

1. 框架結構 1.1StageFright和openCore和NuPlayer的關係 上圖可知,stagefright是在MediaPlayerService這一層加入的,和opencZ喎�"/kf/ware/vc/" target="_blank" class=

AndroidBitmapDrawable相互轉換

一、相關概念 1、Drawable就是一個可畫的物件,其可能是一張點陣圖(BitmapDrawable),也可能是一個圖形(ShapeDrawable),還有可能是一個圖層(LayerDrawable),我們根據畫圖的需求,建立相應的可畫物件 2、Canvas畫布,繪圖的

AndroidDensityPixel的關係對介面顯示的影響

     眾所周知,Android中的Density為分四種,分別是120dpi,160dpi,240dpi,320dpi,對應工程中的資料夾分別為drawable-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi。同一張圖片的尺

Android如何修改編譯的資源ID值(預設值是0x7F...可以隨意改成0x02~0x7E)

一、技術準備今天我們來看一下如何修改Android中編譯時的資源Id的值,在講解這內容之前,我們需要先了解一下Android中的資源編譯之後的結構和編譯過程,這裡就不多說了,具體可以檢視這篇文章:這篇文章中,介紹瞭如何解析Android中編譯之後的resource.arsc檔

AndroidandroidInvalidatepostInvalidate的區別

Android中實現view的更新有兩組方法,一組是invalidate,另一組是postInvalidate,其中前者是在UI執行緒自身中使用,而後者在非UI執行緒中使用。 Android提供了Invalidate方法實現介面重新整理,但是Invalidate不能直接線上程中呼叫,因為他是違背了單執行緒模型

AndroidOkhttpSPDY協議

  HTTP的一個問題在於每個連線一次只允許一個請求和響應,這就讓瀏覽器或者其他客戶端為了並行請求必須生成多個套接字(socket)連線。對客戶端來說,這不算什麼大問題,但是對伺服器來說情況就不一樣了

android CanvasPaint

相關連結: ---------------正文---------------- Canvas類主要實現了螢幕的繪製過程,其中包含了很多實用的方法,比如繪製一條路徑、區域、貼圖、畫點、畫線、渲染文字,下面是Canvas類常用的方法:  void drawRect(RectF rect, Pai