android系統資源文件
『壹』 android 中如何找到系統本人的資源文件tabWidgetStyle.xml
如果你說的是「android:attr/tabWidgetStyle」中的這個tabWidgetStyle的話,貌似它並不是在一個單獨的XML文件中定義的,而是包含在一個總的style XML中。
如果你下載了SDK的話,可以到這個文件中找找看:platforms\android-XX\data\res\values\styles.xml。
你可能在這個文件中找不到tabWidgetStyle,而是只能找到Widget.TabWidget。那是因為在themes.xml中,把tabWidgetStyle定義成了Widget.TabWidget。
在platforms\android-xx\data\res下面應該也能找到其它一些系統的資源文件。
作用:
1.res:資源文件。
2.drawable:布局文件。
3.layout:布局文件。
4.anim:動畫效果文件。
5.values:取值、字元串等。
6.src:代碼,至於src內部的目錄名稱,取決於具體項目結構。
7.libs:庫文件。
『叄』 怎麼知道Android系統中每個文件的作用
只能掌握重點吧。
1.根目錄:
src目錄---存放源代碼文件
gen目錄---ADT插件生成的文件,一般不作修改
assets目錄---存放資源文件目錄,不會在R.java中生成ID
res目錄---存放資源文件目錄,這裡面的每個文件或值都會在R.java中生成一個ID(變數)
AndroidManifest.xml---整個應用程序配置文件,儲存一些 包名,版本號,程序圖標,程序標簽
default.properties---檢查版本文件,自動生成,不能修改(修改將被刪除)。
2.重點目錄及文件
res/drawable-xxxx是存放圖片的目錄,每個圖片需要准備三種解析度版本.
drawable-hdpi---存放高解析度版本
drawable-ldpi---存放中解析度版本
drawable-mdpi---存放低解析度版
res/layout目錄---放置布局文件(xml文件),每個Activity對應一個XML文件
res/value目錄--放置存儲值的文件(xml)
R.java文件
drawable類---給圖片生產的ID
layout類---給布局文件生成ID的
string類---給string.xml裡面鍵值對生成的ID
main.xml文件
控制Activity中控制項的位置,每個Activity對應一個此布局文件
string.xml
存放鍵值對,一般用在程序的多語言版本切換(多個文件,鍵一樣,值不同)
res目錄下的文件都會自動在R.java中生成資源id,並且除了res/raw文件夾外都會被編譯為二進制文件,res/raw文件夾下的內容會保持原樣。res目錄不能隨意創建子目錄。可以通過getResources的相關方法結合其他類進行訪問。
assets目錄支持任意深度的子目錄,其下的文件不會被編譯為二進制(保持原樣),並且不會生成資源id,必須使用/assets開始的相對路徑按照文件的方式進行訪問。可以使用AssetManager 結合其他類進行訪問。
結合R.java的相關內部類和欄位,res/drawable-xxxx目錄可以根據系統解析度自動使用不同的圖片資源。例如高解析度的放在res/drawable-hdpi目錄,低解析度放在res/drawbale-ldpi目錄中,在各個dpi的子目錄中放置好不同解析度的圖片,在使用R.drawable.resourceid的方式訪問時,系統會根據設備屏幕的解析度自動選擇合適的圖像進行展示。
『肆』 android資源文件中怎麼表示
1.引用自定義資源。格式:@[package:]type/name
android:text="@string/hello"
2.引用系統資源。格式:@android:type/name
android:textColor="@android:color/opaque_red"
注意:其實@android:type/name是@[package:]type/name 的一個子類
二.@*代表引用系統的非public資源。格式:@*android:type/name
系統資源定義分public和非public。public的聲明在:
<sdk_path>\platforms\android-8\data\res\values\public.xml
『伍』 android系統中的資源類型有哪幾種
Android 資源類型
1.字元串資源
>>1.普通字元串
>>2.字元串數組
復制代碼
<resources>
<string-array name="planets_array">
<item>aaa</item>
<item>bbb</item>
</string-array>
</resources>
復制代碼
獲取方式:getResources().getStringArray(R.array.planets_array)
>>3.復數字元串資源
某些自然語言中,不同的數字在使用方法上會有所不同,比如one book,two books。當數量大於1時,會使用不同的名詞或其它復數形式;
復制代碼
<resources>
<plurals name="numberOfp">
<item quantity="one">one person</item>
<item quantity="other">more persons</item>
</plurals>
</resources>
復制代碼
quantity屬性的值除了one和other外,還可以是zero,two,few,many;
引用復數字元串:
// 引用數字為1的復數字元串
getResources().getQuantityString(R.pluarlas.numberOfp,1);
// 引用數字為其它值的復數字元串
getResources().getQuantityString(R.pluarlas.numberOfp,10,10);
>>4.佔位符格式化字元串
常用的格式化字元串三種方法:
>>1.在字元串中使用引號
字元串中的值雖然可以隨意指定,但是當遇到特殊符號時(雙引號,單引號)就需要採取特殊的方法來處理這些符號。
如果是單引號(')可以使用轉義符(\)或用雙引號(")將整個字元串括起來,如果是雙引號,可以在雙引號前使用轉義符(\)。
<resources>
<string name="str1">"This'll work"</string> This'll work
<string name="str2">This\'ll work</string> This'll work
<string name="str3">\"apple\"</string> "apple"
</resources>
>>2.用佔位符格式化字元串
使用String.format(String,Object...)方法可以格式化帶佔位符的字元串,只需要在字元串中插入佔位符,就可以使用String.format方法格式化字元串資源,format方法要求的佔位符用%1,%,...,%n,其實第n個佔位符與format方法的n+1個參數值對應;
<resources>
<!-- $s表示該佔位符被字元串替換,$d表示該佔位符被整數替換 -->
<string name="str1">hello,%1$s!You have %2$d new message</string>
</resources>
String str1 =String.format(getResources().getString(R.string.str1), "ly", 17);
>>3.使用HTML標簽格式化字元串資源
字元串資源支持一些HTML標簽,因此可以直接在字元串資源中使用這些HTML標簽格式化字元串
字元串資源支持如下的HTML標簽
<b>粗體字
<i>斜體定
<u>帶下劃線的字
有時需要同時使用HTML標簽和佔位符格式化字元串,如果使用String.format方法格式化字元串,會忽略字元串中的所有HTML標簽。為了使format方法可以格式化帶
HTML標簽的確字元,需要使用Html.formHTML方法處理字元串;
<resources>
<string name="hello_world">Welcome to <b>android</b></string>
<string name="str2">Hello,%1$s! You have <b> %2d new messages </b></string> <!--同時包含佔位符和html標簽的字元串-->
</resources>
由於需要使用Html.formHTML方法處理字元串,因此HTML標簽中的 "<" 需要使用 "<" 表示 ">" 並不需要處理
獲取字元串:
String text = String.format(getResources().getString(R.string.str2), "ly", 10);
CharSequence styledText = Html.fromHtml(text);
// 如果format的某個參數包含HTML的特殊字元,如"<","&",可以使用如下方式讀取字元串的值;
String escapedUsername = TextUtils.htmlEncode("");
String text1 = String.format(getResources().getString(R.string.str2), "ly", 20);
2.Layout資源
1、如果根節點是View,除了<requestFocus>標簽外,不能添加任何子標簽,<requestFocus>可能被添加到布局文件的任何View中,表示該標簽對應的控制項在顯示時處於焦點狀態,整個布局文件只能有一個<requestFocus>標簽
2、根節點是ViewGroup,常用的布局都是ViewGroup的子類
3、重用布局文件
如果想重用某個布局文件,可以使用<include>標簽
<include layout="@layout/xx_layout" />
如果想讓一個布局文件被另一個布局文件引用(使用<include>標簽),可以使用<merge>作為被引用布局文件的根節點,由於<merge>並不會生成任何標簽(在大量引用布局文件時不至於生成大量無用的標簽),但是xml文件必須要有一個根節點,因此<merge>所起的作用就是作為xml文件的根節點,以使xml文件在編譯時不至於出錯,可以把<merge>當成<FrameLayout>使用;
3.圖像資源
在圖像資源中可以存儲圖像文件,還可以使用xml格式的圖像資源來控制項圖像的狀態和行為;
>>1.普通圖像資源
Drawable da = getResources().getDrawable(R.drawable.xxx);
>>2.xml圖像資源
xml圖像資源其實就是在drawable目錄中指定的xml文件,此種方式可以額外指定圖像的某些屬性,如圖像拉動、排列方式;
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_launcher"
android:tileMode="repeat" >
</bitmap>
>>3.Nine-Patch圖像資源
Nine-Patch圖像資源文件必須以9.png作為文件擴展名,如abc.9.png
該圖像資源的主要作用是:防止圖像的某一部分被拉伸;確定將圖像作為背景圖的控制項中內容顯示的位置;
Android SDK本身提供了一個Draw 9-patch的工具,啟動<sdk目錄>\tools\draw9patch.bat命令啟動該工具;
可以通過此工具在png圖的四周繪制1個像素粗的直線,上邊緣和左邊緣的直線分別表示圖像在水平和垂直方向可位值的范圍。如果水平或垂直方向的某個區域不需要拉伸,則可不繪制相應的直線;右邊緣和下邊緣的直線分別表示圖像所在控制項中內容的顯示範圍,內容只在右邊緣和下邊緣繪制直線的區域顯示,表示內容顯示範圍和拉伸范圍的兩給直線有一個重要區別就是表示內容顯示範圍的直線中間不能斷開,而表示拉伸范圍的直線中間可以斷開;
Nine-Patch圖像資源與普通圖像資源引用方法相同,在引用時只寫文件名,活力.9.png;
>>4.XML Nine-Patch圖像資源
Nine-Patch圖像資源也有與其對應的xml圖像資源,使用<nine-patch>標簽來引用Nine-Patch格式的圖像,有一個設置抖動的android:dither屬性;
>>5.圖層資源
圖層資源類似於<FrameLayout>不同的是<FrameLayout>標簽中可以包含任意的控制項,而圖層資源每一層都只有是圖像,定義圖層資源必須使用<layer-list>作為資源文件的根節點,<layer-list>標簽中包含多個<item>標簽,每一個標簽表示一個圖像,最後一個<item>標簽顯示在最頂層;
默認情況下,圖像會盡量充滿顯示圖像的范圍,圖像可能會有拉伸,為了避免圖像拉伸,可以在<item>標簽中使用<bitmap>標簽引用圖像;
復制代碼
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:bottom="10dip" 底端偏移的像素
android:left="10dip" 左側偏移的像素
android:right="10dip" ...
android:top="10dip"> ...
<bitmap
android:gravity="center"
android:src="@drawable/hell" />
</item>
</layer-list>
復制代碼
某些情況下,可以使用圖層來代替<FrameLayout>
>>6.圖像狀態資源,處理控制項不同狀態下的顯示狀態
復制代碼
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bm" android:state_focused="true"></item>
<item android:drawable="@drawable/bm" android:state_pressed="true"></item>
<item android:drawable="@drawable/bm"></item>
</selector>
// android:state_focused/pressed設置為true表示當前item的drawable屬性為獲取焦點和按下時的drawable樣式
復制代碼
>>7.圖像級別(Level)資源
圖像資源狀態只能指定幾種有限的狀態,可以通過圖像級別指定更多的狀態;圖像級別是一個整數的區間,可以通過ImageView.setImageLevel或Drawable.setLevel方法切換不同狀態的圖像;圖像級別資源是xml文件,必須以<level-list>為根節點,每一個item表示一個級別區間,下面是一個xml文件;通過ImageView.setImageLevel(level),根據level所在的區間設定顯示的圖像資源,如果level不在任一區間內則清空ImageView當前圖像;
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="2" android:minLevel="0" android:drawable="@drawable/hell" />
<item android:maxLevel="4" android:minLevel="3" android:drawable="@drawable/hell" />
</level-list>
>>8.淡入淡出(Cross-fade)資源
也是切換兩個圖像(不支持多於兩個圖像的切換),並且使這兩個圖像以淡入淡出效果進行切換,如電燈在開關時逐漸變亮或逐漸變暗;
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/hell"/>
<item android:drawable="@drawable/hell"/>
</transition>
TransitionDrawable da = ...;
// 從第一張圖片切換到第二張圖片,時間效果為1秒
da.startTransition(1000);
// 從第二張圖片切換到第一張圖片,時間效果為1秒
da.reverseTransition(1000);
>>9.嵌入(insert)圖像資源
使用場景:要顯示的圖像要求要小於裝載圖像的View(圖小於View區域),也是通過xml資源定義,只有一個節點inset。
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/hell"
android:insetLeft="10dip" > <!--圖像距離左邊的距離,延伸-->上/下/右的距離-->
</inset>
>>10.剪切(Clip)圖像資源,使用剪切圖像資源可以只顯示圖像的一部分,如可以通過此來製作進度條;
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal" // 指定截取的方向
android:drawable="@drawable/hell" // 指定要截取的圖像
android:gravity="left" > // 指定截取的方式,在此為從左側開始截取
</clip>
ClipDrawable cd = ...;
cd.setLevel(1000);
上面ClipDrawable.setLevel(level)設置截取的圖像寬度,ClipDrawable預設了最大值10000(表示不進行截取),最小值為0(表示不顯示);
>>11. 比例(Scale)圖像資源
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/hell"
android:scaleGravity="center" // 設置圖像顯示的位置
android:scaleHeight="70%" // 設置圖像顯示的高度
android:scaleWidth="80%" > // 設置圖像顯示的寬度
</scale>
>>12.形狀資源
復制代碼
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" > shape可以指定就矩形,oval(橢圓),line(直線),ring(圓)
<corners> 定義圓角
</corners>
<gradient
android:angle="45"
android:startColor="#000000"
android:endColor="#FFFFFF" > 定義顏色漸變,從左下角到或上角
</gradient>
<padding> 定義控制項內容到邊框的距離
</padding>
<stroke> 定義邊線
</stroke>
<solid> 定義填充
</solid>
<size> 定義大小
</size>
</shape>
復制代碼
13.菜單資源
菜單不僅可以在onCreateContextMenu或onCreateOptionsMenu方法中通過代碼創建,還可以在res/menu目錄中建立相應的菜單資源文件,並在上面兩個方法中載入菜單資源;
菜單資源文件必須以<menu>標簽作為根節點,每一個菜單項用一個<item>表示,如果要定義子菜單,可以在<item>標簽中包含<menu>標簽;如果想將多個菜單項劃為一組,可以使用<group>包含多個<item>標簽;
復制代碼
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
復制代碼
查看MenuInflater.inflate(int,Menu)
復制代碼
/**
* Inflate a menu hierarchy from the specified XML resource.
*
* @param menuRes Resource ID for an XML layout resource to load (e.g., <code>R.menu.main_activity</code>)
* @param menu The Menu to inflate into. The items and submenus will be added to this Menu.
*/
public void inflate(int menuRes, Menu menu) {
XmlResourceParser parser = null;
try {
parser = mContext.getResources().getLayout(menuRes);
AttributeSet attrs = Xml.asAttributeSet(parser);
parseMenu(parser, attrs, menu);
} catch ...finally {
if (parser != null) parser.close();
}
}
復制代碼
14.樣式與主題(style/theme)
>>1.樣式style
android中樣式和css中樣式作用是一樣的,都是用於為界面元素定義顯示風格,它是一個包含一個或者多個控制項屬性的集合。
定義樣式需要在res/values/styles.xml中進行定義,如下是一個樣式的定義:
<style name="textViewStyle">
<item name="android:textSize">22sp</item>
<item name="android:textColor">#FF0000</item>
</style>
<style name="textViewStyle1" parent="textViewStyle"></style><!-- 此樣式繼承自textViewStyle -->
<style name="textViewStyle.Livingstone"><!-- 樣式繼承的另一種寫法,但不可用此寫法繼承Android自帶的定義樣式? -->
<item name="android:textColor">#00FF00</item>
</style>
所有定義的樣式都會在R文件中自動生成一個資源ID,加一個點表示樣式繼承會生成上圖所示的資源id;
樣式的引用:
<TextView
style="@style/textViewStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="hello" />
>>2.主題Theme
主題應用於整個應用或者activity,樣式應用於具體的控制項上。主題的應用與樣式定義一樣,不同的是主題還可以設置窗口的顯示風格;主題的引用需要在清單文件中進行引用,如引用到整個應用之上就需要在Application節點中進行配置引用,而引用到單個Activity只需要在此Activity中進行配置引用;
復制代碼
<style name="Livingstonetheme"><!--此定義是一個無Title的主題-->
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">?android:windowNoTitle</item>
<!-- 問號表示引用此主題中android:windowNoTitle屬性的值 -->
<item name="android:textSize">18sp</item>
</style>
復制代碼
android系統定義了一些屬性,如android:theme="@android:style/Theme.Dialog",該主題可以讓Activity看起來像一個對話框,更多主題可以在文檔reference->android->R.style中查看。當主題裡面的樣式屬性值與樣式裡面的屬性值發生沖突的時候會顯示樣式裡面的值;
15.其它資源
在資源文件中還可以包括尺寸(dimen)、整數(integer)、布爾(bool) 、整形數組資源(integer-array)、資源數組(array)、顏色(color)
TypedArray ta = getResources().obtainTypedArray(int id); // 獲取數組資源,包括integer-array、array
Final總結:
除了res/values目錄中的資源名,其它目錄的資源都會以文件名在R類的相應子類中生成變數;而res/values中的資源會以name屬性值為變數名在R類的相應子類中生成變數;
『陸』 android安卓手機系統文件要放在哪個文件夾
Android系統的開放,使其用戶可以自己查看系統和SD卡中的文件夾。就系統和SD卡中常見的目錄代表什麼意思,下面是一個較實用的總結:
一、SD卡中
1. /mnt/sdcard或者/sdcard這是Android手機中SD卡的文件夾路徑,其中/mnt/sdcard/是android 2.2或更高版本所使用的,而/sdcard是android 2.1或早期版本的存儲卡位置。
2. /mnt/sdcard/dcim或/sdcard/dcim這個DCIM文件夾是干什麼用的,這里提示大家,一般數碼相機都有DCIM文件夾,其中進入後Camera為手機攝像頭拍攝的照片或視頻存放位置。同時在DCIM文件夾中還有.thumbnails這個目錄,在Linux中開頭為「.」的文件夾就是開頭為「點」的文件夾是隱藏目錄,這裡面記錄著手機SD卡圖片的縮略圖。
3. /mnt/sdcard/LOST.DIR或/sdcard/LOST.DIR這個LOST.DIR為SD卡掃描時發現的丟失文件,裡面的文件用處不大,可以不用理會。
二、手機或平板電腦中
1. /system/app 這里是android手機rom中的系統應用存放地,如果有Root許可權可以將手機rom中自帶的應用刪除掉,這裡面一般包含一個apk文件和odex文件,大家注意文件名一一對應。
2. /data/data 這里是每個安裝過應用的用戶文件存儲位置,一般為設置文件、資料庫或臨時緩存文件,進入後以每個軟體的package name包名來命名。
3. /dev 這里是Linux系統常規文件夾,裡面的文件很多都是設備模擬的文件系統,一般用戶無需理會。
4. /system/fonts 這裡面保存著系統的字體,如果你有root許可權,可以往裡添加自己喜歡的字體,比如雅黑。
5. /system/framework 這里是android系統的框架,裡面保存著系統核心程序或java類庫,十分重要裡面的任何文件幾乎都不要做刪除操作。
6. /media/audio 這裡面保存著安卓系統默認的鈴聲,alarms是鬧鈴提醒的,notification是簡訊或提示音,ringtones是來電鈴聲,而ui是一些界面音效,比如鍵盤敲擊聲。
7./system/lib 裡面保存的是系統底層類庫,裡面很多都是框架層的實現文件,一般以.so後綴結尾類似windows下的dll文件。
『柒』 怎樣使用Android中資源文件
1.在代碼中使用資源文件在代碼中訪問資源文件,是通過R類中定義的資源文件類型和資源文件名稱來訪問的。具體格式為:R.資源文件類型.資源文件名稱另外,除了訪問用戶自定義的資源文件,還可以訪問系統中的資源文件。訪問系統中的資源文件的格式為:android.R. 資源文件類型.資源文件名稱2.在其他資源文件中引用資源文件經常會在布局文件中引用圖片、顏色資源、字元串資源和尺寸資源。在其他資源中引用資源的一般格式是:@[包名稱:]資源類型/資源名稱使用顏色資源顏色值定義的開始時一個#號,後面是Alpha-RGB的格式。例如:#RGB#ARGB#RRGGBB#AARRGGBB引用資源格式:Java代碼中:R.color.color_nameXML文件中:@[package:]color/color_name使用時在res\values\目錄下,定義一個colors.xml文件,裡面存放顏色名字和顏色值的鍵值對。如:<resources> <color name="red_bg">#f00</color> <color name="blue_text">#0000ff</color></resources>其他資源如字元串、尺寸都是類似的方法。使用字元串資源創建字元串資源文件strings.xml.裡面內容也是鍵值對在Java代碼中引用字元串資源R.string.string_name可如下取得:String str = getString(R.string.string_name).toString();在xml文件中引用字元串資源:@[package:]string/string_name使用尺寸資源尺寸資源被定義在res\values\dimens.xml文件中。相對屏幕物理密度的抽象單位
sp和精度無關的像素和dp類似,與刻度無關的像素,主要處理字體大小引用尺寸資源:在Java代碼中: R.dimen.dimen_name在xml文件中:@[package:]dimen/dimen_name使用原始XML資源XML文件定義在工程的res\xml\目錄下,通過Resources.getXML()方法來訪問。獲得原始XML文件的思路是,通過getResources().getXml()獲得XML原始文件,得到XmlResourceParser對象,通過該對象來判斷是文檔的開始還是結尾、是某個標簽的開始還是結尾,並通過一些獲得屬性的方法來遍歷XML文件,從而訪問XML文件的內容。使用drawables資源drawable資源是一些圖片或者顏色資源,主要用來繪制屏幕,通過Resources.getDrawable()方法獲得。drawable資源分為三類:Bitmap File(點陣圖文件)、Color Drawable(顏色)、Nine-Patch Image(九片圖片)。Android中支持的點陣圖文件有png、jpg和gif。引用點陣圖資源的格式:Java代碼中:R.drawable.file_nameXML文件中:@[package:]drawable/file_name使用布局(layout)資源 布局資源是Android中最常用的一種資源,將屏幕中組件的布局方式定義在一個XML文件中,類似於Web中的HTML頁面。 布局文件位於res\layout\中,名稱任意。Android通過LayoutInflater類將XML文件中的組件解析為可視化的視圖組件。在Activity中,調用Activity.setContentView()方法,將布局文件設置為Activity的界面,使用findViewById()方法來得到布局中的組件。
『捌』 詳解Android系統如何找到最匹配的資源文件的
當你需要一個資源文件時,Android系統會在運行時根據當前設備的配置信息從你提供的資源中選擇一個文件。為了呈現出Android系統是如何選擇一個資源文件的這個流程,假定下面的每個drawable目錄包含了相同的圖片元素的不同像素版本:
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
同時,假定設備的配置信息如下:
Locale = en-GB
Screen orientation = port
Screen pixel density = hdpi
Touchscreen type = notouch
Primary text input method = 12key
通過比較設備的配置信息和可用的資源文件,Android系統從目錄drawable-en-port中選擇了圖片資源。
系統選擇出最佳匹配資源文件的演算法思路如下:
1. 首先排除那些與設備的配置信息相矛盾的資源文件。
drawable-fr-rCA/ 目錄被排除掉, 因為它跟設備的信息 Locale:en-GB 相矛盾。
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
注意例外: 屏幕像素密度也是一個限制條件,如果還有目錄沒有被排除。 即使設備的屏幕密度是hdpi的, drawable-port-ldpi/目錄不會被排除,因為每一個屏幕密度在這里被認為是一個點。 更多有用的信息請參考文檔:Supporting Multiple Screens 。
2. 從列表中 (table 2)挑選(下一個)最高優先順序的匹配項,進行匹配。
3. 是否沒有資源文件目錄包含這個限制條件?
o 如果沒有, 返回第2步 ,同時看看下一個限制條件。在上面的例子中,很顯然是「沒有」,因此要循環到「語言」這個限制條件是才會遇到下一個限制條件。
o 如果有, 則轉到第4步。
4. 排除那些沒有包含限制條件的資源文件目錄。在上面的例子中,系統會排除所有不包含「語言」這個限制條件的資源文件目錄。
drawable/
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
注意例外: 如果限制條件是屏幕像素密度, Android系統會選擇跟設備的屏幕密度最相近的那一個。 通常, Android 系統更傾向於縮小一個較大的源圖片而不是放大一個較小的源圖片。參考 Supporting Multiple Screens。
5. 返回重復執行 2, 3 和4 步,直到僅有一個資源文件目錄。在上面的例子中,「屏幕方向」是下一個需要比較的限制條件.。因此,排除那些沒有指定屏幕方向的資源文件目錄。
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
這樣剩下的目錄就只有drawable-en-port這一個了。
因為獲取每個需要的資源文件的時候都要執行這個過程,所以需要進一步優化系統的一些不足的地方。 其中一個是,一旦知道了設備的配置信息後,系統會首先排除那些沒有匹配項的資源文件目錄。 例如, 如果設備配置信息中的「語言」是「英語」(「en」),則不要將那些包含了「語言」這個限制條件但卻是其他語言信息的資源文件目錄添加到待匹配的資源池中。盡管這樣可能會留下那些沒有「語言」這個限制條件的資源目錄。
對「屏幕尺寸」這個限制條件進行匹配時,如果沒有一個更好的資源文件時,系統會使用那些為比當前屏幕小的屏幕設計的資源文件 (例如,如果需要,一個large-size尺寸屏幕的設備會使用normal-size尺寸屏幕的資源文件)。但是,如果可以選擇的資源文件所對應的屏幕尺寸都比當前屏幕的尺寸還大,此時系統不會使用這些資源文件,同時如果沒有其他更好的資源文件可選的話,你的應用將會崩潰掉。(例如,如果所有的布局資源文件都是以xlarge 為標簽的,而當前的設備屏幕是normal-size尺寸的。)
注意: 列表中(table 2)限制條件的優先順序比限制條件的數量更加重要,盡管這些限制條件可能會跟設備的配置信息匹配的很好。比如,在第4步的之前,帶匹配的資源目錄中最後的一項包括三個限制條件(屏幕方向、觸屏類型、輸入法)可以跟設備信息匹配,但是 drawable-en 目錄僅有一個匹配項(語言)。然而,「語言」擁有比其他幾個限制條件更高的優先順序,所以 drawable-port-notouch-12key 被排除掉。
要了解更多關於如何在你的應用中使用資源文件,請參考Accessing Resources。
轉載,僅供參考,祝你愉快,滿意請採納。
『玖』 如何引用安卓的資源文件
資源文件
所有的應用程序都由兩部分構成:功能(代碼指令)和數據(資源)。
使用資源
res/drawable 專門存放png、jpgÉ圖標文件。在代碼中使用getResources().getDrawable(resourceId)獲取該目錄下的資源。
res/values 專門存放應用使用到的各種類型數據。不同類型的數據存放在不同的文件中。
在代碼中使用資源文件
在代碼中訪問資源文件,是通過R類中定義的資源文件類型和資源文件名稱來訪問的。
具體格式為:
R.資源文件類型.資源文件名稱,除了訪問用戶自定義的資源文件,還可以訪問系統中的資源文件。
訪問系統中的資源文件的格式為:
android.R. 資源文件類型.資源文件名稱。
『拾』 與Android應用程序相關的文件目錄都有哪些
在搭建Android開發環境及簡單地建立一個HelloWorld項目後,本篇將通過HelloWorld項目來介紹Android項目的目錄結構。本文的主要主題如下:
1、HelloWorld項目的目錄結構
1.1、src文件夾
1.2、gen文件夾
1.3、Android 2.1文件夾
1.4、assets
1.5、res文件夾
1.6、AndroidManifest.xml
1.7、default.properties
圖1、HelloWorld項目目錄結構
下面將分節介紹上面的各級目錄結構。
1.1、src文件夾
顧名思義(src, source code)該文件夾是放項目的源代碼的。打開HelloWorld.java文件會看到如下代碼:
package helloworld.test; import android.app.Activity; import android.os.Bundle; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
可以知道:我們新建一個簡單的HelloWorld項目,系統為我們生成了一個HelloWorld.java文 件。他導入了兩個類android.app.Activity和android.os.Bundle,HelloWorld類繼承自Activity且重 寫了onCreate方法。
以下說明針對沒有學過Java或者Java基礎薄弱的人
@Override
在重寫父類的onCreate時,在方法前面加上@Override 系統可以幫你檢查方法的正確性。
例如,public void onCreate(Bundle savedInstanceState){…….}這種寫法是正確的,
如果你寫成public void oncreate(Bundle savedInstanceState){…….}這樣編譯器回報如下錯誤——
The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,
以確保你正確重寫onCreate方法。(因為oncreate應該為onCreate)
而如果你不加@Override,則編譯器將不會檢測出錯誤,而是會認為你新定義了一個方法oncreate。
android.app.Activity類:因為幾乎所有的活動 (activities)都是與用戶交互的,所以Activity類關注創建窗口,你可以用方法setContentView(View)將自己的UI放 到裡面。然而活動通常以全屏的方式展示給用戶,也可以以浮動窗口或嵌入在另外一個活動中。有兩個方法是幾乎所有的Activity子類都實現的:
onCreate(Bundle): 初始化你的活動(Activity),比如完成一些圖形的繪制。最重要的是,在這個方法里你通常將用布局資源(layout resource)調用setContentView(int)方法定義你的UI,和用findViewById(int)在你的UI中檢索你需要編程地 交互的小部件(widgets)。setContentView指定由哪個文件指定布局(main.xml),可以將這個界面顯示出來,然後我們進行相關 操作,我們的操作會被包裝成為一個意圖,然後這個意圖對應有相關的activity進行處理。
onPause():處理當離開你的活動時要做的事情。最重要的是,用戶做的所有改變應該在這里提交(通常ContentProvider保存數據)。
更多的關於Activity類的詳細信息此系列以後的文章將做介紹,如果你想了解更多請參閱相關文檔。
android.os.Bundle 類:從字元串值映射各種可打包的(Parcelable)類型(Bundle單詞就是捆綁的意思,所有這個類很好理解和記憶)。如該類提供了公有方法—— public boolean containKey(String key),如果給定的key包含在Bundle的映射中返回true,否則返回false。該類實現了Parceable和Cloneable介面,所以 它具有這兩者的特性。
1.2、gen文件夾
該 文件夾下面有個R.java文件,R.java是在建立項目時自動生成的,這個文件是只讀模式的,不能更改。R.java文件中定義了一個類——R,R類 中包含很多靜態類,且靜態類的名字都與res中的一個名字對應,即R類定義該項目所有資源的索引。看我們的HelloWorld項目是不是如此,如下圖:
圖2、R.java對應res
通過R.java我們可以很快地查找我們需要的資源,另外編繹器也會檢查R.java列表中的資源是否被使用到,沒有被使用到的資源不會編繹進軟體中,這樣可以減少應用在手機佔用的空間。
1.3、Android 2.1文件夾
該 文件夾下包含android.jar文件,這是一個Java 歸檔文件,其中包含構建應用程序所需的所有的Android SDK 庫(如Views、Controls)和APIs。通過android.jar將自己的應用程序綁定到Android SDK和Android Emulator,這允許你使用所有Android的庫和包,且使你的應用程序在適當的環境中調試。例如上面的HelloWorld.java源文件中 的:
import android.app.Activity; import android.os.Bundle;
這里兩行代碼就是從android.jar導入包。
1.4、assets
包含應用系統需要使用到的諸如mp3、視頻類的文件。
1.5、res文件夾
資源目錄,包含你項目中的資源文件並將編譯進應用程序。向此目錄添加資源時,會被R.java自動記錄。新建一個項目,res目錄下會有三個子目錄:drawabel、layout、values。
drawabel-?dpi:包含一些你的應用程序可以用的圖標文件(*.png、*.jpg)
layout:界面布局文件(main.xml)與WEB應用中的HTML類同,沒修改過的main.xml文件如下(HelloWorld的就沒有修改過):
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
values:軟體上所需要顯示的各種文字。可以存放多個*.xml文件,還可以存放不同類型的數據。比如arrays.xml、colors.xml、dimens.xml、styles.xml
1.6、AndroidManifest.xml
項目的總配置文件,記錄應用中所使用的各種組件。這個文件列出了應用程序所提供的功能,在這個文件中,你可以指定應用程序使用到的服務(如電話服務、互聯網 服務、簡訊服務、GPS服務等等)。另外當你新添加一個Activity的時候,也需要在這個文件中進行相應配置,只有配置好後,才能調用此 Activity。AndroidManifest.xml將包含如下設置:application permissions、Activities、intent filters等。
HelloWorld項目的AndroidManifest.xml如下所示:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="helloworld.test" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloWorld" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
關於AndroidManifest.xml現在就講這么多,此系列後面的文章將單獨詳細介紹。
1.7、 default.properties
記錄項目中所需要的環境信息,比如Android的版本等。
HelloWorld的default.properties文件代碼如下所示,代碼中的注釋已經把default.properties解釋得很清楚了:
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.
# Indicates whether an apk should be generated for each density.
split.density=false
# Project target.
target=android-7