編輯:關於Android編程
如果你想將某一資源用於多種設備配置(但是不想作為默認資源提供), 則無需將同一資源放入多個備用資源目錄中。相反,可以(在某些情況下)創建備用資源,充當保存在默認資源目錄下的資源的別名。
注: 並非所有資源都會提供相應的機制讓你創建指向其他資源的別名。特別是, xml/目錄中的動畫資源、菜單資源、原始資源以及其他未指定的資源均不提供此功能。
例如,加入你有有一個應用圖片icon.jpg, 並且需要不同區域設置獨特版本。但是,加拿大英語和加拿大法語這兩種區域設置需要同一版本。你可能會認為需要將相同的圖像復制到加拿大英語和法語對應的資源目錄中,但事實並非如此,相反,你可以將二者的圖像另存為icon_ca.png(除icon.png以外的任何名稱),並將其放入默認res/drawable/
目錄中。然後,在res/drawable-en-rCA/
和res/drawable-fr-rCA/
中創建icon.xml
文件,使用<bitmap
>元素引用icon_ca.png
資源。這樣,您只需要儲存PNG文件的一個版本和兩個指向該版本的小型xml文件。(XML文件示例如下)
要創建指向現有 Drawable
的別名, 請使用<bitmap
>元素。例如:
如果將此文件另存為icon.xml
(例如,在備用資源目錄中,另存為res/drawable-en-rCA/
),則會編譯到可作為R.drawable.icon
引用的資源中,但實際上它是R.drawable.icon_ca
資源(保存在res/drawable/
中)的別名。
要創建指向現有布局的別名,請使用包裝在<merge
>中的<include
>元素。例如:
如果將此文件另存為main.xml
,則會編譯到可作為R.layout.main
引用的資源中, 但實際上它是R.lyout.main_ltr
資源的別名。
要創建指向現有字符串的別名, 只需要將所需字符串的資源ID用作新字符串的值即可。例如:
Hello
@string/hello
R.string.hi
資源現在是R.string.hello
的別名
其他簡單值的原理相同。 例如,顏色:
#f00
@color/red
為了提供最佳設備兼容性,請始終為應用正確運行所必需的資源提供默認資源。然後,使用配置限定符為特定的設備配置創建備用資源。
這條規則有一個例外:如果應用的 minSdkVersion 為 4 或更高,則在提供帶屏幕密度限定符的備用 Drawable 資源時,不需要默認 Drawable 資源。 即使沒有默認 Drawable 資源,Android 也可以從備用屏幕密度中找到最佳匹配項並根據需要縮放位圖。 但是,為了在所有類型的設備上提供最佳體驗,您應該為所有三種類型的密度提供備用 Drawable。
當您請求要為其提供備用資源的資源時,Android會根據當前的設備配置選擇要在運行時使用的備用資源。為演示 Android如何選擇備用資源,假設以下 Drawable 目錄分別包含相同圖像的不同版本:
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
同時,假設設備配置如下:
區域設置 = en-GB
屏幕方向 = port
屏幕像素密度 = hdpi
觸摸屏類型 = notouch
主要文本輸入法 = 12key
通過將設備配置與可用的備用資源進行比較,Android 從 drawable-en-port
中選擇 Drawable
。
系統使用以下邏輯決定要使用的資源:
1. 淘汰與設備配置沖突的資源文件。
drawable-fr-rCA/
目錄與 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/
未被淘汰,因為此時每個屏幕密度均視為匹配。
2. 選擇列表中(下一個)優先級最高的限定符。(先從 MCC 開始,然後下移。)
3. 是否有資源目錄包括此限定符?
若無,請返回到第2步,看看下一個限定符。(在該示例中,除非達到語言限定符,否則答案始終為“否”。) 若有,請繼續執行第 4 步。4. 淘汰不含此限定符的資源目錄。在該示例中,系統會淘汰所有不含語言限定符的目錄。
例外:如果涉及的限定符是屏幕像素密度,則 Android 會選擇最接近設備屏幕密度的選項。通常,Android 傾向於縮小大型原始圖像,而不是放大小型原始圖像。
5. 返回並重復第 2 步、第 3 步和第 4 步,直到只剩下一個目錄為止。在此示例中,屏幕方向是下一個判斷是否匹配的限定符。因此,未指定屏幕方向的資源被淘汰:
[<package_name
>.]R.<resource_type
>.<recource_name
>
<package_name
> 資源所在包的名稱(如果引用的資源來自於你自己的資源包,則不需要).
<resource_type
> 資源類型的R子類。
<resource_name
> 是不帶擴展名的資源文件名,或XML元素中的android:name
屬性值(如果資源是簡單值)
// Load a background for the current screen from a drawable resource
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;
// Set the Activity title by getting a string from the Resources object, because
// this method requires a CharSequence rather than a resource ID
getWindow().setTitle(getResources().getText(R.string.main_title));
// Load a custom layout for the current screen
setContentView(R.layout.main_screen);
// Set a slide in animation by getting an Animation from the Resources object
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_in));
// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);
[<package_name
>.]R.<resource_type
>.<recource_name
>
#f00
Hello!
您可以通過樣式屬性資源在當前應用的風格主題中引用某個屬性的值。 通過引用樣式屬性,您可以不采用為 UI 元素提供硬編碼值這種方式,而是通過為 UI 元素設置樣式,使其匹配當前風格主題提供的標准變型來定制這些元素的外觀。引用樣式屬性的實質作用是,“在當前風格主題中使用此屬性定義的樣式”。
要引用樣式屬性,名稱語法幾乎與普通資源格式完全相同,只不過將 at 符號 (@) 改為問號 (?),資源類型部分為可選項。 例如:
?[
Android 包含許多標准資源,例如樣式、風格主題和布局。要訪問這些資源,請通過 android 包名稱限定您的資源引用。例如,您可以將 Android 提供的布局資源用於 ListAdapter 中的列表項:
//simple_list_item_1 是平台為 ListView 中的項目定義的布局資源。您可以使用它,而不必自行創建列表項布局。
setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray));
這幾天在做IM模塊,設計圖要求做一個類似下圖所示的自定義控件。 我百度了一下,發現類似的Ddmo有很多,但是還不能完全滿足設計圖的需求。參考了幾個
titlebargithub地址一個簡單易用的導航欄TitleBar,可以輕松實現IOS導航欄的各種效果整個代碼全部集中在TitleBar.java中,所有控件都動態生成
隨著微信紅包席卷而來,緊接著微信中的公眾號各大服務鋪天蓋地,都是和我們的生活緊密相連的。就比如輕松籌,比如去哪兒旅行等等,都可以在微信在有所關注,了解動態。
先給大家展示下效果圖,大家覺效果滿意,請參考實現代碼。直接上代碼:private void setDialog(){View view = getLayoutInflat