Android Resource介紹和使用

?1. 相關文件夾介紹

在Android項目文件夾里面,主要的資源文件是放在res文件夾里面的。assets文件夾是存放不進行編譯加工的原生文件,即該文件夾里面的文件不會像xml,java文件被預編譯,可以存放一些圖片,html,js, css等文件。在后面會介紹如何讀取assets文件夾的資源!
res文件夾里面的多個文件夾的各自介紹(來自網上的Android開發指南中文版內容):

目錄Directory

資源類型Resource Types

res/anim/

XML文件,它們被編譯進逐幀動畫(frame by frame animation)或補間動畫(tweened animation)對象

res/drawable/

.png、.9.png、.jpg文件,它們被編譯進以下的Drawable資源子類型中:

要獲得這種類型的一個資源,可以使用Resource.getDrawable(id)

位圖文件

9-patches(可變尺寸的位圖)

為了獲取資源類型,使用mContext.getResources().getDrawable(R.drawable.imageId)

注意:放在這里的圖像資源可能會被aapt工具自動地進行無損壓縮優化。比如,一個真彩色但并不需要256色的PNG可能會被轉換為一個帶調色板的8位PNG。這使得同等質量的圖片占用更少的資源。所以我們得意識到這些放在該目錄下的二進制圖像在生成時可能會發生變化。如果你想讀取一個圖像位流并轉換成一個位圖(bitmap),請把圖像文件放在res/raw/目錄下,這樣可以避免被自動優化。

res/layout/

被編譯為屏幕布局(或屏幕的一部分)的XML文件。參見布局聲明(Declaring Layout)

res/values/

可以被編譯成很多種類型的資源的XML文件。

注意:?不像其他的res/文件夾,它可以保存任意數量的文件,這些文件保存了要創建資源的描述,而不是資源本身。XML元素類型控制這些資源應該放在R類的什么地方。

盡管這個文件夾里的文件可以任意命名,不過下面使一些比較典型的文件(文件命名的慣例是將元素類型包含在該名稱之中):

??????array.xml?定義數組

?????colors.xml?定義color drawable和顏色的字符串值(color string values)。使用Resource.getDrawable()和Resources.getColor()分別獲得這些資源。

?????dimens.xml定義尺寸值(dimension value)。使用Resources.getDimension()獲得這些資源。

??????strings.xml定義字符串(string)值。使用Resources.getString()或者Resources.getText()獲取這些資源。getText()會保留在UI字符串上應用的豐富的文本樣式。

??????styles.xml?定義樣式(style)對象。

res/xml/

任意的XML文件,在運行時可以通過調用Resources.getXML()讀取。

res/raw/

直接復制到設備中的任意文件。它們無需編譯,添加到你的應用程序編譯產生的壓縮文件中。要使用這些資源,可以調用Resources.openRawResource(),參數是資源的ID,即R.raw.somefilename

2.自動生成的R class

在項目文件夾的gen文件夾里面有個R.java,我們平常引用的資源主要引用這個類的變量。
注意:R類是自動生成的,并且它不能被手動修改。當資源發生變動時,它會自動修改。

3.?在代碼中使用資源

下面是一個引用資源的語法:
R.resource_type.resource_name??或者?android.R.resource_type.resource_name
其中resource_type是R的子類,保存資源的一個特定類型。resource_name是在XML文件定義的資源的name屬性,或者有其他文件類型為資源定義的文件名(不包含擴展名,這指的是drawable文件夾里面的icon.png類似的文件,name=icon)。?Android包含了很多標準資源,如屏幕樣式和按鈕背景。要在代碼中引用這些資源,你必須使用android進行限定,如android.R.drawable.button_background
下面是官方給出的一些在代碼中使用已編譯資源的正確和錯誤用法的例子:
// Load a background for the current screen from a drawable resource. 
this.getWindow().setBackgroundDrawableResource(R.drawable.my_background_image); // WRONG Sending a string resource reference into a  
// method that expects a string. 
this.getWindow().setTitle(R.string.main_title); // RIGHT Need to get the title from the Resources wrapper. 
this.getWindow().setTitle(Resources.getText(R.string.main_title)); // Load a custom layout for the current screen. 
setContentView(R.layout.main_screen); // Set a slide in animation for a ViewFlipper object. 
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  R.anim.hyperspace_in)); // Set the text on a TextView object. 
TextView msgTextView = (TextView)findViewByID(R.id.msg); 
msgTextView.setText(R.string.hello_message);  

?

查了SDK Doc,才明白為什么window.setTitle要先Resources.getText,原來setTitle的參數是CharSequence,Resources.getText(int)返回的是CharSequence;而其他setText的參數有的是CharSequence,有的是int(這就是Resources變量值)。
同時官方還給了兩個使用系統資源的例子:
//在屏幕上顯示標準應用程序的圖標
public class MyActivity extends Activity { public void onStart() { requestScreenFeatures(FEATURE_BADGE_IMAGE); super.onStart(); setBadgeResource(android.R.drawable.sym_def_app_icon); } 
} //應用系統定義的標準"綠色背景"視覺處理 
public class MyActivity extends Activity public void onStart() { super.onStart(); setTheme(android.R.style.Theme_Black); } 
} 

4. xml文件內引用資源

1) 引用自定義的資源
android:text="@string/hello"
這里使用"@"前綴引入對一個資源的引用--在@[package:]type/name形式中后面的文本是資源的名稱。在這種情況下,我們不需要指定包名,因為我們引用的是我們自己包中的資源。type是xml子節點名,name是xml屬性名:
<?xml version="1.0" encoding="utf-8"?> 
<resources> <string name="hello">Hello World, HelloDemo!</string> 
</resources> 
2) 引用系統資源
android:textColor="@android:color/opaque_red" ? 指定package: android
3)?引用主題屬性
另外一種資源值允許你引用當前主題中的屬性的值。這個屬性值只能在樣式資源和XML屬性中使用;它允許你通過將它們改變為當前主題提供的標準變化來改變UI元素的外觀,而不是提供具體的值。
android:textColor="?android:textDisabledColor"
注意,這和資源引用非常類似,除了我們使用一個"?"前綴代替了"@"。當你使用這個標記時,你就提供了屬性資源的名稱,它將會在主題中被查找--因為資源工具知道需要的屬性資源,所以你不需要顯示聲明這個類型(如果聲明,其形式就是?android:attr/android:textDisabledColor)。除了使用這個資源的標識符來查詢主題中的值代替原始的資源,其命名語法和"@"形式一致:?[namespace:]type/name,這里類型可選。

5. 替換資源(為了可替換的資源和配置)

個人理解這個替換資源主要用于適應多種規格的屏幕,以及國際化。對于這部分的內容,請參考http://androidappdocs.appspot.com/guide/topics/resources/resources-i18n.html,以后再研究!?

6. Color Value

語法:
  1. <color?name="color_name">#color_value</color>?
可以保存在res/values/colors.xml (文件名可以任意)。
xml引用:android:textColor="@color/color_name"
Java引用:?int color = Resources.getColor(R.color.color_name)
其中#color_value有以下格式(A代表Alpha通道):
#RGB
#ARGB
#RRGGBB
#AARRGGBB
xml示例(聲明兩個顏色,第一個不透明,第二個透明色):
<?xml version="1.0" encoding="utf-8"?> 
<resources> <color name="opaque_red">#f00</color> <color name="translucent_red">#80ff0000</color> 
</resources> 

7.Color Drawables

語法:
  1. <drawable?name="color_name">color_value</drawable>?
可以保存在res/values/colors.xml。
xml引用:android:background="@drawable/color_name"
java引用:Drawable redDrawable = Resources.getDrawable(R.drawable.color_name)
color_name和上面的一樣。個人認為,一般情況下使用color屬性,當需要用到paintDrawable時才使用drawable屬性。
xml示例:
<?xml version="1.0" encoding="utf-8"?> 
<resources> <drawable name="opaque_red">#f00</drawable> <drawable name="translucent_red">#80ff0000</drawable> 
</resources> 

?

8. 圖片

一般放在res/drawable/里面。官方提示png (preferred), jpg (acceptable), gif (discouraged),看來一般使用png格式比較好!
xml引用 ?@[package:]drawable/some_file
java引用?R.drawable.some_file?? ? 引用是不帶擴展名

9. dimension

語法:
  1. <dimen?name="dimen_name">dimen_value單位</dimen>?
一般保存為res/values/dimen.xml。
度量單位:
px(象素): 屏幕實際的象素,常說的分辨率1024*768pixels,就是橫向1024px, 縱向768px,不同設備顯示效果相同。
in(英寸): 屏幕的物理尺寸, 每英寸等于2.54厘米。
mm(毫米): 屏幕的物理尺寸。
pt(點)? : 屏幕的物理尺寸。1/72英寸。
dp/dip? : 與密度無關的象素,一種基于屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp = 1px。但dp和px的比例會隨著屏幕密度的變化而改變,不同設備有不同的顯示效果。設置寬度或者高度等屬性時,推薦使用dp(dip)作為單位
sp????? : 與刻度無關的象素,主要用于字體顯示best for textsize,作為和文字相關大小單位。
XML:?android:textSize="@dimen/some_name"
Java:?float dimen = Resources.getDimen(R.dimen.some_name)
xml示例:
<?xml version="1.0" encoding="utf-8"?> 
<resources> <dimen name="one_pixel">1px</dimen> <dimen name="double_density">2dp</dimen> <dimen name="sixteen_sp">16sp</dimen> 
</resources> 

10. string

下面是官方給出的正確/錯誤的例子:
//不使用轉義符則需要用雙引號包住整個string 
<string name="good_example">"This'll work"</string> //使用轉義符 
<string name="good_example_2">This\'ll also work</string> //錯誤 
<string name="bad_example">This won't work!</string> //錯誤 不可使用html轉義字符 
<string name="bad_example_2">XML encodings won&apos;t work either!</string> 

?

對于帶格式的string,例如在字符串中某些文字設置顏色,可以使用html標簽。對于這類型的string,需要進行某些處理,在xml里面不可以被其他資源引用。官方給了一個例子來對比普通string和帶格式string的使用:
<?xml version="1.0" encoding="utf-8"?> 
<resources> <string name="simple_welcome_message">Welcome!</string> <string name="styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string> 
</resources> 

?

Xml代碼
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textAlign="center" android:text="@string/simple_welcome_message"/> 

?

Java代碼
// Assign a styled string resource to a TextView on the current screen. 
CharSequence str = getString(R.string.styled_welcome_message); 
TextView tv = (TextView)findViewByID(R.id.text); 
tv.setText(str); 

?

另外對于帶風格/格式的string的處理,就麻煩一點點。官方給了一個例子:
<?xml version="1.0" encoding="utf-8"?> 
<resources> <string name="search_results_resultsTextFormat">%1$d results for &lt;b>&amp;quot;%2$s&amp;quot;&lt;/b></string> 
</resources> 

?

這里的%1$d是個十進制數字,%2$s是字符串。當我們把某個字符串賦值給%2$s之前,需要用htmlEncode(String)函數處理那個字符串:
  1. //title是我們想賦值給%2$s的字符串?
  2. String?escapedTitle?=?TextUtil.htmlEncode(title);?
然后用String.format() 來實現賦值,接著用fromHtml(String) 得到格式化后的string:
String resultsTextFormat = getContext().getResources().getString(R.string.search_results_resultsTextFormat); 
String resultsText = String.format(resultsTextFormat, count, escapedTitle); 
CharSequence styledResults = Html.fromHtml(resultsText); 

11. assets文件夾資源的訪問

assets文件夾里面的文件都是保持原始的文件格式,需要用AssetManager以字節流的形式讀取文件。
1. 先在Activity里面調用getAssets()來獲取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode)方法則指定讀取的文件以及訪問模式就能得到輸入流InputStream。?
3. 然后就是用已經open file 的inputStream讀取文件,讀取完成后記得inputStream.close()
4.調用AssetManager.close()關閉AssetManager。
至于style and theme,Layout,動畫Animation,Menu則查看本博客的其他文章。附上官方的相應介紹網址http://androidappdocs.appspot.com/guide/topics/resources/available-resources.html
另外,官方還介紹了icon design的Guidelineshttp://androidappdocs.appspot.com/guide/practices/ui_guidelines/icon_design.html

轉載于:https://www.cnblogs.com/ftxe/p/3642618.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376018.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql.sock 111,錯誤2002(HY000):無法通過套接字’/var/run/mysqld/mysqld.sock’連接到本地MySQL服務器(111)...

在Ubuntu計算機上獲取關于問題“ mysql”命令的錯誤&#xff1a;錯誤2002(HY000)&#xff1a;無法通過套接字’/var/run/mysqld/mysqld.sock’連接到本地MySQL服務器(111)服務未以以下錯誤啟動&#xff1a;rootbettorssidekick:/# service mysql startstart: Job failed to sta…

c語言中的break和continue

break和continue是C語言中的兩條語句&#xff0c;這兩條語句在循環和選擇結構中經常會遇到。 break首先最長見與switch語句中。比如我們設計一個程序&#xff0c;通過輸入學生的成績來確定學生成績等級&#xff0c;等級一共分為四等&#xff0c;分別是優秀、良好、一般、較差&a…

構建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后臺管理系統(44)-工作流設計-設計表單...

構建ASP.NET MVC4EF5EasyUIUnity2.x注入的后臺管理系統&#xff08;44&#xff09;-工作流設計-設計表單 原文:構建ASP.NET MVC4EF5EasyUIUnity2.x注入的后臺管理系統&#xff08;44&#xff09;-工作流設計-設計表單系列目錄 設計表單是比較復雜的一步&#xff0c;完成一個表單…

匯編語言中變量的聲明

參考鏈接為&#xff1a;http://zhidao.baidu.com/link?urlQZiRv_6nAzF1XHOG83SwngS1HoRZXWSP2a0uQEHVDON1rP1a07xlXCiYUXd0ORQP32h_7Nhfd-afCMox8q8McKDATAS SEGMENT;定義數據段BUF0 DB 1;定義一個字節型變量&#xff0c;名稱是BUF0&#xff0c;初始值是01HBUF1 DB "2&qu…

php標簽嵌入規范,HTML標簽嵌套的詳細規則

這次給大家帶來HTML標簽嵌套的詳細規則&#xff0c;HTML標簽嵌套的注意事項有哪些&#xff0c;下面就是實戰案例&#xff0c;一起來看一下。最近在重新學習HTML的知識&#xff0c;算是對HTML的一個重新認識吧&#xff01;別小看了這東西&#xff0c;一切的網頁可都是以它為基礎…

6、動態方法調用和使用通配符定義

action名稱后面:!方法名即可;使用通配符:12345678910111213<?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds…

Sql 函數大全 (更新中...由難到簡

1.字符處理類&#xff1a; 1.1 指定指定字符輸出的次數 select replicate(1a,5) 結果&#xff1a;1a1a1a1a1a &#xff08;5個1a&#xff09;轉載于:https://www.cnblogs.com/shengwei/p/4479662.html

C錯誤處理

本文為個人學習筆記&#xff0c;僅用于個人學習、復習使用&#xff01;c語言不提供對錯誤處理的直接支持&#xff0c;但是作為一種系統編程語言&#xff0c;它以返回值得形式允許您訪問底層數據&#xff0c;在發生錯誤時&#xff0c;大多數的c或Unix函數調用返回1或NULL&#x…

存儲過程——存儲過程與視圖(三)

數據庫視圖&#xff1a;視圖是虛表&#xff0c;是從一個或幾個基本表&#xff08;或視圖&#xff09;中導出的表&#xff0c;在系統的數據字典中僅存放了視圖的定義&#xff0c;不存放視圖對應的數據。 在sql中視圖是基于sql語句的結果集的可視化的表&#xff1b;視圖包含行和列…

php如何轉類型,PHP數據類型轉換

指的是將數據(變量)的值轉換成目標數據類型。PHP中有兩種數據類型轉換方式&#xff1a;自動轉換&#xff0c;強制轉換自動轉換&#xff1a;系統根據操作所需要的類型將變量的值進行對應類型的轉換自動轉換都是系統本身所做的事情&#xff0c;不需要用戶去干預。強制轉換&#x…

lr_start_timer,lr_get_transaction_duration,lr_get_transaction_wasted_time函數使用總結

lr_start_timer&#xff1a; 函數的功能&#xff1a; 為了計算時間更加精確&#xff0c;可以用這個函數去掉LR自身的檢查點所浪費的時間。如text check and image time Action() { double time_elapsed; merc_timer_handle_t timer;web_url("487989.html","URLh…

c可變參數

本文為個人學習筆記&#xff0c;僅供個人學習、復習使用。參考鏈接&#xff1a;鏈接1、鏈接2在c語言中&#xff0c;我們可以定義這樣的函數&#xff0c;函數帶有可變數量的參數。 int func(int num,...){ . . . } int main(){func(2,2,3); }1、要注意定義函數時函數的形式&…

dz打不開plugin. php,Discuz!應用中心打不開空白的解決方法

近期&#xff0c;很多使用Discuz!程序建論壇的站長都會發現&#xff0c;Discuz!后臺的應用中心打不開了。這二天Discuz!終于給出了原因&#xff1a;十分抱歉的通知您&#xff0c;由于資源和人力投入問題&#xff0c;我們已經關閉了 www.discuz.net 的發言權限&#xff0c;但是歷…

編程習題05

1、給定一個數組a[N],我們希望構造數組b[N]&#xff0c;其中b[i]a[0]*a[1]*...*a[N-1]/a[i]。在構造過程&#xff1a;不允許使用除法&#xff1b;要求O(1)空間復雜度和O(n)時間復雜度&#xff1b;除遍歷計數器與a[N] b[N]外&#xff0c;不可使用新的變量(包括棧臨時變量、對空間…

ECshop安裝及報錯解決方案總結

一、安裝ECshop ECShop是一款B2C獨立網店系統 &#xff0c;適合企業及個人快速構建個性化網上商店。系統是基于PHP語言及MYSQL數據庫構架開發的跨平臺開源程序。2006年3月推出以來1.0版以來&#xff0c;受到市場的檢驗&#xff0c;廣受好評。 1.安裝準備 ECshop最新版本為2.7.3…

Command mysql 中文,MySQL Command Line[mysql命令行常用命令]_MySQL

bitsCN.comMySql下載地址&#xff1a;www.mysql.org第一招、mysql服務的啟動和停止net stop mysqlnet start mysql第二招、登陸mysqlmysql -u用戶名-p用戶密碼mysql -uroot -p&#xff0c; 回車後提示你輸入密碼&#xff0c;輸入12345&#xff0c;然後回車即可進入到mysql中了&…

setTimeout里如果有$(this),$(this)指的是誰?

$(".next").click(function(){ setTimeout(function(){$(this).addClass("gray");//指向的是window 而不是$(".next") },1000); })轉載于:https://www.cnblogs.com/xchlsl/p/4484762.html

數據結構--數組實現線性表

線性表&#xff1a;由同類型數據元素構成的有序序列的線性結構 編譯環境&#xff1a;Dev-C 結構實現&#xff1a; struct LNode {ElementType Data[MAXSIZE];int last; }; 主要操作函數&#xff1a; List MakeEmpty();//初始化一個空表ElementType FindKth(int k, List L);//根…

Codeforces Round #241 (Div. 2) A. Guess a number!

題目鏈接 題意 &#xff1a; 就是猜數游戲&#xff0c;根據給定的操作&#xff0c;讓你輸出一個符合條件的。 思路 &#xff1a; 這個題好玩兒&#xff0c;設置兩個變量&#xff0c;一個找符合條件的數的上限&#xff0c;一個找下限&#xff0c;再判斷一下。 1 #include <st…

php中嵌套調用的原理,嵌套調用

## 嵌套調用- 模塊與模塊之間的相互調用(相對路徑)- 項目和項目之間的相互調用(絕對路徑)- 也可以寫一個通用模塊就可以大面積使用&#xff0c;減少代碼維護成本- 或許可以實現一些神奇的效果#### 示例代碼設置文件/html/www/demo/tpl/tpl.blade.php內容如下~~~這是最頂端模塊{…