android字元串資源
㈠ 在Android Studio中字元串資源定義有問題,編碼不正確導致亂碼怎麼辦
如果你知道字元串實際應該顯示的內容,你可以直接刪掉亂碼的,輸入正確的;如果是全部的都顯示亂碼,先備份一下,然後你可以在studio右下角,切換一下文件編碼(utf8或者gbk或者別的)看行不行。
㈡ 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中怎麼把字元串直接轉換成資源ID,例如讓字元串R.drawable.ic_launcher可以直接用
如果是在Context里,可以直接調用getString(R.string.app_name);
android4大組件都繼承了Context的
當然也可以調用Resources.getString(R.string.app_name);來獲取
㈣ android開發,修改string.xml文件中字元串資源時,突然出錯,請高手指點,該如何修改
是你Eclipse的問題
㈤ android應用程序中使用資源類型有哪些
動畫資源:
補間動畫保存在 res/anim/下,從R.anim類訪問。
幀動畫保存在 res/drawable/ 下,從R.drawable類訪問。
顏色狀態列表資源:
保存在res/color/ 下,從R.color類訪問
drawable 資源:
用點陣圖或XML定義各種圖形。
保存在 res/drawable/ 下,從R.drawable類訪問。
布局資源:
程序的界面
保存在res/layout/下,從R.layout類訪問。
菜單資源
定義您的應用程序菜單中的內容。
保存在res/menu/下,從R.menu類訪問。
字元串資源
定義字元串,字元串數組和復數形式(包括字元串格式和樣式)。
保存在res/values/下,從R.string, R.array,和 R.plurals類訪問。
定義用戶界面元素的外觀和格式。
保存在res/values/下,從R.style類訪問。
更多的資源類型
如布爾值、整數、尺寸、顏色和其他數組資源的定義。
保存在res/values/下,但是每個從獨特的R子類訪問(如R.bool、R.integer、R.dimen等)
㈥ Android中,再一個類中如何引用資源文件字元串
你可以在Adapter類中寫一個屬性:
private Activity context;
然後你在寫一個構造方法:
public xxAdapter(xx adpter ,Context context){
this.contxt=context;
}
㈦ android 怎樣向string中加入字元串
一般我們的字元串資源文件都是放在values/strings.xml文件中,比如
[java] view plain
<string name="back">返回</string>
<string name="login">登錄</string>
但是有時候需要用到拼接,比如 登錄名: XXX,這里XXX是變化的。這時候我們可能會想到拼接。其實也可以使用格式化方式處理。比如
[java] view plain
<string name="alert">I am %1$d years old</string>
注意%1$d 表示一個參數,d表示整數,%1&s表示字元串,如果有第二個參數的話數字往上加,如%2$s
在代碼中使用的話:
[java] view plain
int nAge=23;
String sAgeFormat = getResources().getString(R.string.alert);
String sFinalAge = String.format(sAgeFormat, nAge); 多個參數時
[java] view plain
<string name="alert2">My name is %1$s , I am form %2$s</string>
代碼中使用的話:
[java] view plain
String sInfoFormat = getResources().getString(R.string.alert2);
String sFinalInfo=String.format(sInfoFormat, sName, sCity);
㈧ android字元串資源文件在哪個目錄
Android 提供三種類型的字元串資源。
String 提供一個單獨的字元串
String Array 提供一個字元串數組
Quantity Strings(Plurals) 為不同的數量提供不同的字元串適配
String
一個單獨的字元串,定義在xml文件里,可以供 layout xml 引用,也可以供 Java 讀取。一般默認的,在 res/values/strings.xml 里可以定義 <string name="helloworld">Hello World</string>。下面是一個完整的 xml 內容。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="string_name">text_string</string>
</resources>
其中的 name 對應的就是 key,每個字元串都需要有一個單獨的 key 。必須單獨的,如果有重復的,編譯器可能不會報錯,但是運行的時候,可能會讀不到你想要的內容。這個就不用深入解釋了,理所應當的,key 必須唯一,沒啥好商量的。但是 xml 文件可以有多個。很多人喜歡把所以的字元串都放在 strings.xml 里。這是開發工具默認幫你生成的。但是隨著項目的持續開發,項目越來越大的時候,我還是建議可以分成多個文件的。這樣有利於代碼的閱讀,而且不會影響運行的效率,多出來的工作在編譯的時候已經做好了。
使用方法:
在layout xml 里使用,例如
<TextView android:text="@string/helloworld"/>
或者在 Java code 里使用
String string = getString(R.string.helloworld);
getString(int) 和 getText(int) 都可以返回字元串內容,不同的是 getText(int) 可以返回富文本(rich text)字元串。富文本就是加粗啊,斜體啊之類的簡單的樣式,下面會說。
String Array
字元串數組,可以定義在 strings.xml 里,也可以定義在其他的 xml 里。
<string-array name="string_array_name">
<item>text_string</item>
</string-array>
一個 string-array 里可以有 N 多個 item。同樣,name 也必須唯一。item 可以是一個字元串,也可以是另外一個字元串的引用。使用:
Resources res = getResources();
String[] strings = res.getStringArray(R.array.string_array_name);
這樣就得到了一個字元串數組了。
Quantity Strings(Plurals)
帶數量的字元串。在很多語言里,不同的數量的文字的表達方式有些不同。比如在英文里,一本書表示為 one book . 兩本書表示為 two books 。在單詞上,或者在語法上,就有很多的不一樣的地方,這樣一個字元串就可能搞不定了。
這個時候 Quantity Strings 就可以幫你搞定這個問題。
語法是這樣子的:
<resources>
<plurals name="plural_name">
<item quantity=["zero" | "one" | "two" | "few" | "many" | "other"] >text_string</item>
</plurals>
</resources>
name 也就是 ID,唯一,不廢話
item 可以有多個,每個 item 都有 quantity 屬性,每個 item 的 quantity 屬性不能一樣。
zero 表示沒有;one 表示一個,單數;two 表示兩個,或者一對,一雙;few:表示很少;many:表示挺多的;other:表示其他。
使用:
int count = getNumberOfsongsAvailable();
Resources res = getResources();
String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);