




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本章要求:第7章
用戶資源的使用1字符串、顏色和尺寸資源的使用2使用布局資源3數(shù)組資源的使用4Drawable資源的使用5樣式和主題資源的使用6使用菜單資源7Android程序的國際化本章要求:第7章
用戶資源的使用1字符串、顏色和尺寸資源7.1字符串(string)資源7.2顏色(color)資源7.3尺寸(dimen)資源7.4數(shù)組(array)資源7.5Drawable資源7.6樣式(style)和主題(theme)資源7.7使用菜單(menu)資源7.8Android程序國際化7.9綜合實例——顯示游戲?qū)Π椎?章
用戶資源的使用7.1字符串(string)資源第7章
用戶資源的使用Android中的資源是指可以在代碼中使用的外部文件,這些文件作為應(yīng)用程序的一部分,被編譯到應(yīng)用程序當(dāng)中。在Android中,各種資源都被保存到Android應(yīng)用的res目錄下對應(yīng)的子目錄中,這些資源既可以在Java文件中使用,也可以在其他XML資源中使用。本章將對Android中的資源進(jìn)行詳細(xì)介紹。第7章
用戶資源的使用Android中的資源是指可以在代碼中使用的外部文件7.1.1定義字符串資源文件7.1.2使用字符串資源7.1字符串(string)資源7.1.1定義字符串資源文件7.1字符串(strin在Android中,當(dāng)需要使用大量的字符串作為提示信息時,可以將這些字符串聲明在配置文件中,從而實現(xiàn)程序的可配置性。下面將對字符串資源進(jìn)行詳細(xì)介紹。7.1字符串(string)資源在Android中,當(dāng)需要使用大量的字符串作為提示信字符串資源文件位于res/values目錄下,根元素是<resources></resources>標(biāo)記,在該元素中,使用<string></string>標(biāo)記定義各字符串,其中,通過為<string></string>標(biāo)記設(shè)置name屬性來指定字符串的名稱,在起始標(biāo)記<string>和結(jié)束標(biāo)記</string>中間添加字符串的內(nèi)容。例如,在Android項目中,創(chuàng)建一個名稱為strings.xml的字符串資源文件,在該文件中定義一個名稱為introduce的字符串,內(nèi)容是公司簡介,strings.xml的具體代碼如下:<resources><stringname="introduce">明日科技有限公司是一家以計算機(jī)軟件為核心的高科技企業(yè),
多年來始終致力于行業(yè)管理軟件開發(fā)、數(shù)字化出版物制作、
計算機(jī)網(wǎng)絡(luò)系統(tǒng)綜合應(yīng)用以及行業(yè)電子商務(wù)網(wǎng)站開發(fā)等領(lǐng)域。</string></resources>說明:在Android中,資源文件的文件名不能是大寫字母,必須是以小寫字母a-z開頭的,由小寫字母a-z、0-9或者下劃線“_”組成。7.1.1定義字符串資源文件字符串資源文件位于res/values目錄下,根元素在字符串資源文件中定義字符串資源后,就可以在Java文件或是XML文件中使用該字符串資源了。在Java文件中使用字符串資源的語法格式如下:[<package>.]R.string.字符串名例如,在MainActivity中,要獲取名稱為introduce的字符串,可以使用下面的代碼。getResources().getString(R.roduce)在XML文件中使用字符串資源的基本語法格式如下:@[<package>:]string/字符串名例如,在定義TextView組件時,通過字符串資源為其指定android:text屬性的代碼如下:<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/introduce"/>下面通過一個具體的實例來介紹字符串資源的具體應(yīng)用?!纠?-1】在Eclipse中創(chuàng)建Android項目,實現(xiàn)一個游戲的關(guān)于界面,并通過字符串資源設(shè)置界面中的文字內(nèi)容。(實例位置:光盤\MR\源碼\第77.1.2使用字符串資源在字符串資源文件中定義字符串資源后,就可以在Java文件或是章\7-1)(1)打開新建項目的res/values目錄下的strings.xml文件,在該文件中將默認(rèn)添加的名稱為hello的字符串資源刪除,然后分別定義名稱為title、company、url和introduce的字符串資源,關(guān)鍵代碼如下:<stringname="title">關(guān)于泡泡龍</string><stringname="company">開發(fā)公司:吉林省明日科技有限公司</string><stringname="url">公司網(wǎng)址:</string><stringname="introduce"> 泡泡龍游戲是一款十分流行的益智游戲。它可以從下方中央的彈珠發(fā)射臺射出彩珠,當(dāng)有多于3個同色彈珠相連時,這些彈珠將會爆掉,否則該彈珠被連接到指向的位置,直到泡泡下壓越過下方的警戒線,游戲結(jié)束。</string>(2)打開res/layout/目錄下默認(rèn)創(chuàng)建的main.xml文件,在該文件中,共添加4個TextView組件,并使用前面3個步驟中創(chuàng)建的字符串、顏色和尺寸資源,關(guān)鍵代碼如下:<TextViewandroid:text="@string/title"android:gravity="center"android:layout_width="match_parent"android:layout_height="wrap_content"章\7-1)/><TextViewandroid:text="@string/introduce"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:text="@string/company"android:gravity="center"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:text="@string/url"android:gravity="center"android:layout_width="match_parent"android:layout_height="wrap_content"/>/>說明:在上面的代碼中,第一個組件設(shè)置要顯示的文字為名稱為title的字符串資源;第二個組件設(shè)置要顯示的文字為名稱為introduce的字符串資源;第3個組件設(shè)置為要顯示的文字為company的字符串資源;第4個組件設(shè)置要顯示的文字為名稱為url的字符串資源。運行本實例,將顯示如圖7-1所示的運行結(jié)果。圖7-1使用字符串資源設(shè)置界面中的文字說明:7.2顏色(color)資源7.2.1顏色值的定義7.2.2定義顏色資源文件7.2.3使用顏色資源7.2顏色(color)資源7.2.1顏色值的定義顏色資源也是進(jìn)行Android應(yīng)用開發(fā)時,比較常用的資源,它通常用于設(shè)置文字、背景的顏色等。下面將對顏色資源進(jìn)行詳細(xì)介紹。7.2顏色(color)資源顏色資源也是進(jìn)行Android應(yīng)用開發(fā)時,比較常用的在Android中,顏色值通過RGB(紅、綠、藍(lán))三原色和一個透明度(Alpha)值表示。它必須以井號“#”開頭,后面接Alpha-Red-Green-Blue形式的內(nèi)容。其中,Alpha值可以省略,如果省略,那么該顏色默認(rèn)是完全不透明的。通常情況下,顏色值使用以下4種形式之一。#RGB:也就是使用紅、綠、藍(lán)三原色的值來表示顏色,其中紅、綠和藍(lán)采用0~f來表示。例如,要表示紅色,可以使用#f00。#ARGB:也就是使用透明度以及紅、綠、藍(lán)三原色來表示顏色,其中透明度、紅、綠和藍(lán)均采用0~f來表示。例如,要表示半透明的紅色,可以使用#6f00。#RRGGBB:也就是使用紅、綠、藍(lán)三原色的值來表示顏色,與#RGB不同的是,這里的紅、綠和藍(lán)使用00~ff來表示。例如,要表示藍(lán)色,可以使用#00f。#AARRGGBB:也就是使用透明度以及紅、綠、藍(lán)三原色來表示顏色,其中透明度、紅、綠和藍(lán)均采用00~ff來表示。例如,要表示半透明的綠色,可以使用#6600ff00。說明:在表示透明度時,0表示完全透明,f表示完全不透明。7.2.1顏色值的定義在Android中,顏色值通過RGB(紅、綠、藍(lán))三顏色資源文件位于res/values目錄下,根元素是<resources></resources>標(biāo)記,在該元素中,使用<color></color>標(biāo)記定義各顏色資源,其中,通過為<color></color>標(biāo)記設(shè)置name屬性來指定顏色資源的名稱,在起始標(biāo)記<color>和結(jié)束標(biāo)記</color>中間添加顏色值。例如,在Android項目中,創(chuàng)建一個名稱為colors.xml的顏色資源文件,在該文件中定義4個顏色資源,其中第一個名稱為title,顏色值采用#AARRGGBB格式,第二個名稱為title1,顏色值采用#ARGB格式,這兩個資源都表示半透明的紅色;第3個名稱為content,顏色值采用#RRGGBB格式,第4個名稱為content1,顏色值采用#RGB格式,這兩個資源都表示完全不透明的紅色。colors.xml的具體代碼如下:<resources><colorname="title">#66ff0000</color><colorname="title1">#6f00</color><colorname="content">#ff0000</color><colorname="content1">#f00</color></resources>7.2.2定義顏色資源文件顏色資源文件位于res/values目錄下,根元素是在顏色資源文件中定義顏色資源后,就可以在Java文件或是XML文件中使用該顏色資源了。在Java文件中使用顏色資源的語法格式如下:[<package>.]R.color.顏色資源名例如,在MainActivity中,通過顏色資源為TextView組件設(shè)置文字顏色,可以使用下面的代碼。TextViewtv=(TextView)findViewById(R.id.title);tv.setTextColor(getResources().getColor(R.color.title1));在XML文件中使用顏色資源的基本語法格式如下:@[<package>:]color/顏色資源名例如,在定義TextView組件時,通過顏色資源為其指定android:textColor屬性,也就是設(shè)置組件內(nèi)文字的顏色的代碼如下:<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/title"/>下面我們將對例7-1進(jìn)行修改,為界面中的文字設(shè)置不同顏色。首先,在Eclipse中打開7-1項目,在res/values/目錄下,創(chuàng)建一個保存顏色資源的colors.xml文件,在該文件中,分別定義名稱為title、7.2.3使用顏色資源在顏色資源文件中定義顏色資源后,就可以在Java文件introduce、company和url的顏色資源,關(guān)鍵代碼如下:<resources><colorname="title">#ff0</color><colorname="introduce">#7e8</color><colorname="company">#f70</color><colorname="url">#9f60</color></resources>然后,打開main.xml布局文件,分別為id為title、company、url和introduce的TextView組件設(shè)置android:textColor屬性,用于改變各組件的文字顏色,修改后的代碼如下:<TextViewandroid:text="@string/title"android:textColor="@color/title"android:gravity="center"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:textColor="@color/introduce"android:text="@string/introduce"
introduce、company和url的顏色資源,關(guān)鍵代android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:text="@string/company"android:gravity="center"android:textColor="@color/company"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:text="@string/url"android:gravity="center"android:textColor="@color/url"android:layout_width="match_parent"android:layout_height="wrap_content"/>再次運行例7-1的程序,將顯示如圖7-2所示的運行結(jié)果。android:layout_width="wrap_con圖7-2使用顏色資源設(shè)置文字顏色后的運行結(jié)果圖7-2使用顏色資源設(shè)置文字顏色后的運行結(jié)果7.3尺寸(dimen)資源7.3.1Android支持的尺寸單位7.3.2定義尺寸資源文件7.3.3使用尺寸資源7.3尺寸(dimen)資源7.3.1Android尺寸資源也是進(jìn)行Android應(yīng)用開發(fā)時,比較常用的資源,它通常用于設(shè)置文字的大小、組件的間距等。下面將對尺寸資源進(jìn)行詳細(xì)介紹。7.3尺寸(dimen)資源尺寸資源也是進(jìn)行Android應(yīng)用開發(fā)時,比較常用的7.3.1Android支持的尺寸單位在Android中,支持的常用尺寸單位如下:px(Pixels,像素):每個px對應(yīng)屏幕上的一個點。例如,320*480的屏幕在橫向有320個象素,在縱向有480個象素。in(Inches,英寸):標(biāo)準(zhǔn)長度單位。每英寸等于2.54厘米。例如,形容手機(jī)屏幕大小,經(jīng)常說,3.2(英)寸、3.5(英)寸、4(英)寸都是指這個單位。這些尺寸是屏幕對角線的長度。如果手機(jī)的屏幕是4英寸,表示手機(jī)的屏幕(可視區(qū)域)對角線長度是4*2.54=10.16厘米。pt(points,磅):屏幕物理長度單位,1/72英寸。dip或dp(設(shè)置獨立像素):一種基于屏幕密度的抽象單位。在每英寸160點的顯示器上,1dip=1px。但隨著屏幕密度的改變,dip與px的換算也會發(fā)生改變。sp(比例像素):主要處理字體的大小,可以根據(jù)用戶字體大小首選項進(jìn)行縮放。mm(Millimeters,毫米):屏幕物理長度單位。7.3.1Android支持的尺寸單位在Android中7.3.2定義尺寸資源文件尺寸資源文件位于res/values目錄下,根元素是<resources></resources>標(biāo)記,在該元素中,使用<dimen></dimen>標(biāo)記定義各尺寸資源,其中,通過為<color></color>標(biāo)記設(shè)置name屬性來指定尺寸資源的名稱,在起始標(biāo)記<dimen>和結(jié)束標(biāo)記</dimen>中間定義一個尺寸常量。例如,在Android項目中,創(chuàng)建一個名稱為dimens.xml的尺寸資源文件,在該文件中定義兩個尺寸資源,其中第一個名稱為title,尺寸值是24px,第二個名稱為content,尺寸值是14dp。dimens.xml文件的具體代碼如下:<?xmlversion="1.0"encoding="utf-8"?><resources><dimenname="title">24px</dimen><dimenname="content">14dp</dimen></resources>7.3.2定義尺寸資源文件尺寸資源文件位于res/val在尺寸資源文件中定義尺寸資源后,就可以在Java文件或是XML文件中使用該尺寸資源了。在Java文件中使用尺寸資源的語法格式如下:[<package>.]R.color.尺寸資源名例如,在MainActivity中,通過尺寸資源為TextView組件設(shè)置文字大小,可以使用下面的代碼。TextViewtv=(TextView)findViewById(R.id.title);tv.setTextSize(getResources().getDimension(R.dimen.title));在XML文件中使用尺寸資源的基本語法格式如下:@[<package>:]dimen/尺寸資源名例如,在定義TextView組件時,通過尺寸資源為其指定android:textSize屬性,也就是設(shè)置組件內(nèi)文字的大小的代碼如下:<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="@dimen/content"/>下面再次對例7-1進(jìn)行修改,為界面中的文字設(shè)置字體大小及內(nèi)邊距。7.3.3使用尺寸資源在尺寸資源文件中定義尺寸資源后,就可以在Java文件首先,在Eclipse中打開7.1項目,在res/values/目錄下,創(chuàng)建一個保存尺寸資源的dimen.xml文件,在該文件中,分別定義名稱為title、padding、introduce和titlePadding的尺寸資源,關(guān)鍵代碼如下:<resources><dimenname="title">26dp</dimen><dimenname="padding">6dp</dimen><dimenname="introduce">16dp</dimen><dimenname="titlePadding">10dp</dimen></resources>然后,打開main.xml布局文件,分別為id為title、company、url和introduce的TextView組件設(shè)置android:textSize屬性、android:padding屬性或者android:paddingLeft屬性,用于改變各組件的文字大小及內(nèi)邊距,修改后的代碼如下:<TextViewandroid:text="@string/title"android:padding="@dimen/titlePadding"android:textSize="@dimen/title"android:textColor="@color/title"android:gravity="center"首先,在Eclipse中打開7.1項目,在res/valueandroid:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:textColor="@color/introduce"android:text="@string/introduce"android:textSize="@dimen/introduce"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:text="@string/company"android:gravity="center"android:textColor="@color/company"android:padding="@dimen/padding"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:text="@string/url"android:gravity="center"android:layout_width="match_pandroid:textColor="@color/url"android:paddingLeft="@dimen/padding"android:layout_width="match_parent"android:layout_height="wrap_content"/>再次運行例7-1的程序,將顯示如圖7-3所示的運行結(jié)果。圖7-3使用尺寸資源設(shè)置文字大小及內(nèi)邊距后的運行結(jié)果android:textColor="@color/url7.4數(shù)組(array)資源7.4.1定義數(shù)組資源文件7.4.2使用數(shù)組資源7.4數(shù)組(array)資源7.4.1定義數(shù)組資源文同Java一樣,Android中,也允許使用數(shù)組。但是在Android中,不推薦在Java程序中定義數(shù)組,而是推薦使用數(shù)組資源文件來定義數(shù)組。下面將對數(shù)組資源進(jìn)行詳細(xì)介紹。7.4數(shù)組(array)資源同Java一樣,Android中,也允許使用數(shù)組。但數(shù)組資源文件位于res/values目錄下,根元素是<resources></resources>標(biāo)記,在該元素中,包括以下3個子元素。<array/>子元素:用于定義普通類型的數(shù)組。<integer-array/>子元素,用于定義整數(shù)數(shù)組。<string-array/>子元素,用于定義字符串?dāng)?shù)組。無論使用上面3個子元素中的哪一個,都可以使用name屬性定義數(shù)組名稱,并且在起始標(biāo)記和結(jié)束標(biāo)記中間使用<item></item>標(biāo)記定義數(shù)組中的元素。例如,要定義一個名稱為arrays.xml的數(shù)組資源文件,在該文件中,添加一個名稱為listItem,包括3個數(shù)組元素的字符串?dāng)?shù)組,可以使用下面的代碼:<?xmlversion="1.0"encoding="utf-8"?><resources><string-arrayname="listItem"><item>程序管理</item><item>郵件設(shè)置</item><item>保密設(shè)置</item></string-array></resources>7.4.1定義數(shù)組資源文件數(shù)組資源文件位于res/values目錄下,根元素是<res在數(shù)組資源文件中定義數(shù)組資源后,就可以在Java文件或是XML文件中使用該數(shù)組資源了。在Java文件中使用數(shù)組資源的語法格式如下:[<package>.]R.array.數(shù)組名例如,在MainActivity中,要獲取名稱為listItem的字符串?dāng)?shù)組,可以使用下面的代碼。String[]arr=getResources().getStringArray(R.array.listItem);在XML文件中使用數(shù)組資源的基本語法格式如下:@[<package>:]array/數(shù)組名例如,在定義ListView組件時,通過字符串?dāng)?shù)組資源為其指定android:entries屬性的代碼如下:<ListViewandroid:id="@+id/listView1"android:entries="@array/listItem"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView>
7.4.2使用數(shù)組資源在數(shù)組資源文件中定義數(shù)組資源后,就可以在Java文件或是XM7.5Drawable資源7.5.1圖片資源7.5.2StateListDrawable資源7.5Drawable資源7.5.1圖片資源Drawable資源是Android應(yīng)用中使用最為廣泛、靈活的資源。它不僅可以直接使用圖片作為資源,而且可以使用多種XML文件作為資源,只要是這個XML文件可以被系統(tǒng)編譯成Drawable子類的對象,那么這個XML文件就可以作為Drawable資源。7.5Drawable資源Drawable資源是Android應(yīng)用中使用最為廣在Android中,不僅可以將擴(kuò)展名為.png、.jpg和.gif的普通圖片作為圖片資源,而且可以將擴(kuò)展名為.9.png的9-Patch圖片作為圖片資源。9-Patch圖片是使用AndroidSDK中提供的工具Draw9-patch生成的,該工具位于AndroidSDK安裝目錄下的tools目錄中,雙擊draw9patch.bat即可打開該工具。使用該工具可以生成一個可以伸縮的標(biāo)準(zhǔn)PNG圖像,Android會自動調(diào)整大小來容納顯示的內(nèi)容。在使用圖片資源時,首先將準(zhǔn)備好的圖片放置在res/drawable-xxx目錄中,然后就可以在Java文件或是XML文件中訪問該資源了。在Java代碼中,可以通過下面的語法格式訪問它。[<package>.]R.drawable.<文件名>注意:Android中不允許圖片資源的文件名中出現(xiàn)大寫字母,且不能以數(shù)字開頭。例如,在MainActivity中,通過圖片資源為ImageView組件設(shè)置要顯示的圖片,可以使用下面的代碼。ImageViewiv=(ImageView)findViewById(R.id.imageView1);iv.setImageResource(R.drawable.head);7.5.1圖片資源在Android中,不僅可以將擴(kuò)展名為.png、.j在XML文件中,可以通過下面的語法訪問布局資源文件。@[<package>:]drawable.文件名例如,在定義ImageView組件時,通過圖片資源為其指定android:src屬性,也就是設(shè)置要顯示的圖片,具體代碼如下:<ImageViewandroid:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/head"/>說明:在Android應(yīng)用中,使用9-Patch圖片時不需要加擴(kuò)展名.9.png,例如,要在XML文件中使用一個名稱為mrbiao.9.png的9-Patch圖片,可以使用@drawable/mrbiao。下面將介紹一個使用9-Patch圖片實現(xiàn)不失真按鈕背景的實現(xiàn)?!纠?-2】在Eclipse中創(chuàng)建Android項目,實現(xiàn)應(yīng)用9-Patch圖片作為按鈕的背景,并為讓按鈕背景隨按下狀態(tài)動態(tài)改變。(實例位置:光盤\MR\源碼\第7章\7-2)在XML文件中,可以通過下面的語法訪問布局資源文件。(1)打開Draw9-patch工具,在該工具中,將已經(jīng)準(zhǔn)備好的green1.png圖片和red.png圖片制作成9-Patch圖片。最終完成后的圖片如圖7-4所示。圖7-4完成后的圖片(2)修改新建項目的res/layout目錄下的布局文件main.xml,在默認(rèn)添加的垂直線性布局管理器中,將默認(rèn)添加的TextView組件刪除,然后添加3個Button按鈕,并為各按鈕設(shè)置背景,其中第一個按鈕的背景設(shè)置為普通PNG圖片,第二個按鈕的背景設(shè)置為9-Patch圖片,第3個按鈕的背景設(shè)置為StateListDrawable資源(用于讓按鈕的背景圖片隨按鈕狀態(tài)而動態(tài)改變),關(guān)鍵代碼如下:<Buttonandroid:id="@+id/button1"android:background="@drawable/green1"android:layout_margin="5px"android:layout_width="match_parent"android:layout_height="50px"(1)打開Draw9-patch工具,在該工具中,將已經(jīng)準(zhǔn)android:text="我是普通圖片背景"/><Buttonandroid:id="@+id/button2"android:background="@drawable/green"android:layout_margin="5px"android:layout_width="450px"android:layout_height="150px"android:text="我是9-Patch圖片背景(按鈕寬度和高度固定)"/><Buttonandroid:id="@+id/button3"android:background="@drawable/button_state"android:layout_margin="5px"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="我是9-Patch圖片背景(單擊會變色)"/>(3)在res/drawable-mdpi目錄中,創(chuàng)建一個名稱為button_state.xml的StateListDrawable資源文件,在該文件中,分別指定android:state_pressed屬性為true時,使用的背景圖片,和android:text="我是普通圖片背景"/>android:state_pressed屬性為false時,使用的背景圖片,這兩張圖片均為9-Patch圖片。button_state.xml文件的具體代碼如下:<?xmlversion="1.0"encoding="utf-8"?><selectorxmlns:android="/apk/res/android"> <itemandroid:drawable="@drawable/red"android:state_pressed="true"/><itemandroid:drawable="@drawable/green"android:state_pressed="false"/></selector>運行本實例,將顯示如圖7-5所示的運行結(jié)果。其中,第一個按鈕采用的是普通PNG圖片,所以失真了,而后面兩個則采用的是9-Patch圖片,所以沒有失真。另外,在最后一個按鈕上按下鼠標(biāo)后,按鈕的背景將變成紅色,抬起鼠標(biāo)后,又變回綠色。圖7-5使用9-Patch圖片實現(xiàn)不失真按鈕背景android:state_pressed屬性為false時StateListDrawable資源是定義在XML文件中的Drawable對象,能根據(jù)狀態(tài)來呈現(xiàn)不同的圖像。例如,一個Button按鈕存在多種不同的狀態(tài)(pressed、enabled或focused等),使用StateListDrawable資源可以為按鈕的每個狀態(tài)提供不同的按鈕圖片。StateListDrawable資源文件同圖片資源一樣,也是放在res/drawable-xxx目錄中。StateListDrawable資源文件的根元素為<selector></selector>,在該元素中可以包括多個<item></item>元素。每個Item元素可以設(shè)置以下兩個屬性。android:color或android:drawable:用于指定顏色或者Drawable資源。android:state_xxx:用于指定一個特定的狀態(tài),常用的狀態(tài)屬性如表7-1所示。表7-1StateListDrawable支持的常用狀態(tài)屬性7.5.2StateListDrawable資源狀態(tài)屬性描述android:state_active表示是否處于激活狀態(tài),屬性值為true或falseandroid:state_checked表示是否處于勾選狀態(tài),屬性值為true或falseandroid:state_enabled表示是否處于可用狀態(tài),屬性值為true或falseandroid:state_first表示是否處于開始狀態(tài),屬性值為true或falseStateListDrawable資源是定義在XML文件中的例如,創(chuàng)建一個根據(jù)編輯框是否獲得焦點來改變文本框內(nèi)文字顏色的StateListDrawable資源,名稱為edittext_focused.xml,可以使用下面的代碼:<?xmlversion="1.0"encoding="utf-8"?><selectorxmlns:android="/apk/res/android"> <itemandroid:color="#f60"android:state_focused="true"/><itemandroid:color="#0a0"android:state_focused="false"/></selector>創(chuàng)建一個StateListDrawable資源后,可以將該文件放置在res/drawable-xxx目錄下,然后,在相應(yīng)的組件中使用該資源即可。例如,要在編輯框中使用名稱為edittext_focused.xml的StateListDrawable資源,可以使用下面的代碼:android:state_focused表示是否處于獲得焦點狀態(tài),屬性值為true或falseandroid:state_last表示是否處于結(jié)束狀態(tài),屬性值為true或falseandroid:state_middle表示是否處于中間狀態(tài),屬性值為true或falseandroid:state_pressed表示是否處于被按下狀態(tài),屬性值為true或falseandroid:state_selected表示是否處于被選擇狀態(tài),屬性值為true或falseandroid:state_window_focused表示窗口是否已經(jīng)得到焦點狀態(tài),屬性值為true或false例如,創(chuàng)建一個根據(jù)編輯框是否獲得焦點來改變文本框內(nèi)文字顏色的<EditTextandroid:id="@+id/editText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@drawable/edittext_focused"android:text="請輸入文字"/>下面將通過一個實例來介紹StateListDrawable資源的具體應(yīng)用。【例7-3】在Eclipse中創(chuàng)建Android項目,實現(xiàn)當(dāng)按鈕為可用狀態(tài)時,使用綠色背景,為不可用狀態(tài)時,使用灰色背景。(實例位置:光盤\MR\源碼\第7章\7-3)(1)打開Draw9-patch工具,在該工具中,制作如圖7-6所示的3張9-Patch圖片圖7-6制作完成的9-Patch圖片<EditText(2)在res/drawable-mdpi目錄中,創(chuàng)建一個名稱為button_state.xml的StateListDrawable資源文件,在該文件中,分別指定android:state_enabled屬性為true時,使用的背景圖片(green.9.png),和android:state_enabled屬性為false時,使用的背景圖片(grey.9.png)。button_state.xml文件的具體代碼如下:<?xmlversion="1.0"encoding="utf-8"?><selectorxmlns:android="/apk/res/android"> <itemandroid:drawable="@drawable/green"android:state_enabled="true"/><itemandroid:drawable="@drawable/grey"android:state_enabled="false"/></selector>(3)修改新建項目的res/layout目錄下的布局文件main.xml,在默認(rèn)添加的垂直線性布局管理器中,將默認(rèn)添加的TextView組件刪除,然后添加兩個Button按鈕,并為各按鈕設(shè)置背景,其中第一個按鈕的背景設(shè)置為StateListDrawable資源(用于讓按鈕的背景圖片隨按鈕狀態(tài)而動態(tài)改變),第二個按鈕的背景設(shè)置為9-Patch圖片red.9.png,關(guān)鍵代碼如下:<Buttonandroid:id="@+id/button1"android:background="@drawable/button_state"android:padding="15px"(2)在res/drawable-mdpi目錄中,創(chuàng)建一個名android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="我是可用按鈕"/><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:background="@drawable/red"android:layout_marginTop="5px"android:padding="15px"android:layout_height="wrap_content"android:text="單擊我可以讓上面的按鈕變?yōu)榭捎?/>(4)打開MainActivity,在onCreate()方法中,首先獲取第一個按鈕,并為其添加單擊事件監(jiān)聽器,在重寫的onClick()方法中,將該按鈕設(shè)置為不可用,并改變按鈕上的文字,然后再獲取第二個按鈕,并為其添加單擊事件監(jiān)聽器,在重寫的onClick()方法中,將第一個按鈕設(shè)置為可用,并改變按鈕上顯示的文字。關(guān)鍵代碼如下:finalButtonbutton1=(Button)findViewById(R.id.button1); //獲取布局文件中添加的button1android:layout_width="wrap_co//為按鈕添加單擊事件監(jiān)聽button1.setOnClickListener(newOnClickListener(){ @OverridepublicvoidonClick(Viewv){ Buttonb=(Button)v; //獲取當(dāng)前按鈕 b.setEnabled(false); //讓按鈕變?yōu)椴豢捎? b.setText("我是不可用按鈕"); //改變按鈕上顯示的文字 Toast.makeText(MainActivity.this,"按鈕變?yōu)椴豢捎?,Toast.LENGTH_SHORT) .show(); //顯示消息提示框 }});Buttonbutton2=(Button)findViewById(R.id.button2); //獲取布局文件中添加的button2//為按鈕添加單擊事件監(jiān)聽button2.setOnClickListener(newOnClickListener(){ @Override
//為按鈕添加單擊事件監(jiān)聽publicvoidonClick(Viewv){ button1.setEnabled(true); //讓button1變?yōu)榭捎? button1.setText("我是可用按鈕"); //改變按鈕上顯示的文字 }});運行本實例,將顯示如圖7-7所示的運行結(jié)果。單擊“我是可用按鈕”按鈕,該按鈕將變?yōu)椴豢捎冒粹o,如圖7-8所示。當(dāng)?shù)谝粋€按鈕變?yōu)椴豢捎冒粹o后,單擊“單擊我可以讓上面的按鈕變?yōu)榭捎谩卑粹o,可以讓已經(jīng)變?yōu)椴豢捎玫陌粹o再次變?yōu)榭捎冒粹o。圖7-7顯示可用按鈕圖7-8顯示不可用按鈕publicvoidonClick(Viewv){7.6樣式(style)和主題(theme)資源7.6.1樣式資源7.6.2主題資源7.6樣式(style)和主題(theme)資源7.6.在Android中,提供了用于對Android應(yīng)用進(jìn)行美化的樣式和主題資源,使用這些資源可以開發(fā)出各種風(fēng)格的Android應(yīng)用。下面將對Android中提供的樣式資源和主題資源進(jìn)行詳細(xì)介紹。7.6樣式(style)和主題(theme)資源在Android中,提供了用于對Android應(yīng)用進(jìn)樣式資源主要用于對組件的顯示樣式進(jìn)行控制,例如,改變文本框顯示文字的大小和顏色等。樣式資源文件放置在res/values目錄中,它的根元素是<resources></resources>標(biāo)記,在該元素中,使用<style></style>標(biāo)記定義樣式,其中,通過為<style></style>標(biāo)記設(shè)置name屬性來指定樣式的名稱,在起始標(biāo)記<style>和結(jié)束標(biāo)記</style>中間添加<item></item>標(biāo)記來定義格式項,在一個<style></style>標(biāo)記中,可以包括多個<item></item>標(biāo)記。例如,在Android項目中,創(chuàng)建一個名稱為styles.xml的樣式資源文件,在該文件中定義一個名稱為title的樣式,在該樣式中,定義兩個樣式,一個是設(shè)置文字大小的樣式,另一個是設(shè)置文字顏色的樣式,styles.xml的具體代碼如下:<resources> <stylename="title"> <itemname="android:textSize">48px</item> <itemname="android:textColor">#f60</item> </style></resources>在Android中,還支持繼承樣式的功能,只需要在<style></style>標(biāo)記中,7.6.1樣式資源樣式資源主要用于對組件的顯示樣式進(jìn)行控制,例如,改變使用parent屬性進(jìn)行設(shè)置就可以了。例如,定義一個名稱為basic的樣式,然后再定義一個名稱為title的樣式,讓該樣式繼承basic樣式,關(guān)鍵代碼如下:<resources> <stylename="basic"> <itemname="android:textSize">48px</item> <itemname="android:textColor">#f60</item> </style><stylename="title"parent="basic"><itemname="android:padding">10px</item><itemname="android:gravity">center</item></style></resources>說明:當(dāng)一個樣式繼承另一樣式后,如果在這個子樣式中,出現(xiàn)了與父樣式相同的屬性,將使用子樣式中定義的屬性值。在樣式資源文件中定義樣式資源后,就可以在XML文件中使用該樣式資源了。在XML文件中使用樣式資源的基本語法格式如下:使用parent屬性進(jìn)行設(shè)置就可以了。例如,定義一個名稱為b@[<package>:]style/樣式資源名例如,在定義TextView組件時,使用名稱為title的樣式資源為其定義樣式,可以使用下面的代碼。<TextViewandroid:id="@+id/textView1"style="@style/title"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView"/>@[<package>:]style/樣式資源名主題資源與樣式資源類似,定義主題資源的資源文件,也是保存在res/values目錄中,其根元素同樣是<resource></resource>標(biāo)記,在該標(biāo)記中,也是使用<style></style>標(biāo)記定義主題。所不同的是,主題資源不能作用于單個的View組件,而是對所有(或單個)Activity起作用。通常情況下,主題中定義的格式都是為改變窗口外觀而設(shè)置的。例如,要定義一個用于改變所有窗口背景的主題,可以使用下面的代碼:<resources> <stylename="bg"> <itemname="android:windowBackground">@drawable/background</item> </style></resources>主題資源定義完成后,就可以使用該主題了。在Android中,提供了以下兩種使用主題資源的方法。在AndroidManifest.xml文件中使用主題資源在AndroidManifest.xml文件中使用主題資源比較簡單,只需要使用android:theme屬性指定要使用的主題資源即可。例如,要使用名稱為bg的主題資源,可以使用下面的代碼:7.6.2主題資源主題資源與樣式資源類似,定義主題資源的資源文件,也是android:theme="@style/bg"android:theme屬性是AndroidManifest.xml文件中<application></application>標(biāo)記和<></>標(biāo)記的共有屬性,如果要使用的主題資源作用于項目中的全部Activity上,可以使用<application></application>標(biāo)記的將android:theme屬性,也就是為<application></application>標(biāo)記添加android:theme屬性,關(guān)鍵代碼如下:<applicationandroid:theme="@style/bg">…</application>如果要使用的主題資源作用于項目中的指定Activity上,那么可以在配置該Activity時,為其指定android:theme屬性,關(guān)鍵代碼如下:<activityandroid:theme="@style/bg">…</activity>在Android應(yīng)用中,android:theme屬性值還可以使用AndroidSDK提供的一些主題資源,這些資源我們只需使用即可。例如,使用android:theme="@android:style/Theme.NoTitleBar"后,屏幕上將不顯示標(biāo)題欄。在Java文件中使用主題資源android:theme="@style/bg"在Java文件中也可以為當(dāng)前的Activity指定使用的主題資源,這可以在Activity的onCreate()方法中,通過setTheme()方法實現(xiàn),例如,下面的代碼就是指定當(dāng)前Activity使用名稱為bg的主題資源。@OverridepublicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setTheme(R.style.bg); setContentView(R.layout.main);}注意:在Activity的onCreate()方法中,設(shè)置使用的主題資源時,一定要在為該Activity設(shè)置布局內(nèi)容前設(shè)置(也就是在setContentView()方法之前設(shè)置),否則將不起作用。使用bg主題資源后,運行默認(rèn)的MainActivity時,屏幕的背景不再是默認(rèn)的黑色了,而是如圖7-9所示的圖片。在Java文件中也可以為當(dāng)前的Activity指定使用的主題圖7-9更改主題的MainActivity的運行結(jié)果下面通過一個具體的實例介紹如何應(yīng)用樣式和主題資源實現(xiàn)背景半透明效果的Activity。【例7-4】在Eclipse中創(chuàng)建Android項目,實現(xiàn)背景半透明效果的游戲開始界面。(實例位置:光盤\MR\源碼\第7章\7-4)(1)修改新建項目的res/layout目錄下的布局文件main.xml,在默認(rèn)添加的垂直線性布局管理器中,將默認(rèn)添加的TextView組件刪除,然后添加一個用于顯示頂部圖片的ImageView,并設(shè)置其要顯示的圖片,接下來再添加一個圖7-9更改主題的MainActivity的運行結(jié)果相對布局管理器,并在該布局管理器中添加一個ImageView組件,用于在中間位置顯示“進(jìn)入”按鈕,關(guān)鍵代碼如下:<LinearLayoutxmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!--添加頂部圖片--> <ImageViewandroid:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="centerCrop" android:layout_weight="1" android:src="@drawable/top"/> <!--添加一個相對布局管理器--> <RelativeLayoutandroid:layout_weight="2" android:layout_height="wrap_content" android:background="@drawable/bottom" android:id="@+id/relativeLayout1" android:layout_width="match_parent"> <!--添中間位置的圖片--> <ImageViewandroid:layout_width="wrap_content"
相對布局管理器,并在該布局管理器中添加一個ImageViewandroid:layout_height="wrap_content" android:id="@+id/imageButton0" android:src="@drawable/start_a" android:layout_alignTop="@+id/imageButton5" android:layout_centerInParent="true"/> </RelativeLayout></LinearLayout>(2)在res/values目錄中,創(chuàng)建一個名稱為styles.xml的樣式資源文件,在該文件中,定義一個名稱為Theme.Translucent的樣式,該樣式繼承系統(tǒng)中提供的android:style/Theme.Translucent樣式,并為該樣式設(shè)置兩個項目,一個用于設(shè)置透明度,另一個用于設(shè)置不顯示窗體標(biāo)題。styles.xml文件的完整代碼如下:<?xmlversion="1.0"encoding="utf-8"?><resources><stylename="Theme.Translucent"parent="android:style/Theme.Translucent"><itemname="android:alpha">0.95</item><itemname="android:windowNoTitle">true</item></style></resources>android:layout_height="wrap_co說明:android:alpha屬性用于設(shè)置透明度,其屬性值為浮點型,0.0表示完全透明,1.0為完全不透明。(3)打開AndroidManifest.xml文件,修改默認(rèn)配置的主活動MainActivity的代碼,為其設(shè)置android:theme屬性,其屬性值采用步驟(2)中創(chuàng)建的樣式資源,修改后的關(guān)鍵代碼如下:<activityandroid:label="@string/app_name"android:theme="@style/Theme.Translucent"android:name=".MainActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity>運行本實例,在屏幕上將顯示如圖7-10所示的背景半透明效果的游戲開始界面。說明:圖7-10背景半透明效果的游戲開始界面圖7-10背景半透明效果的游戲開始界面7.7使用菜單(menu)資源7.7.1定義菜單資源文件7.7.2使用菜單資源7.7使用菜單(menu)資源7.7.1定義菜單資源在桌面應(yīng)用程序中,菜單的使用十分廣泛。但是在Android應(yīng)用中,菜單減少了不少。不過Android還是提供了兩種實現(xiàn)菜單的方法,分別是通過Java代碼創(chuàng)建菜單和使用菜單資源文件創(chuàng)建菜單,Android推薦的是使用菜單資源來定義菜單。下面將詳細(xì)介紹如何使用菜單資源來定義菜單。7.7使用菜單(menu)資源在桌面應(yīng)用程序中,菜單的使用十分廣泛。但是在Andr菜單資源文件通常應(yīng)該放置在res/menu目錄下,在創(chuàng)建項目時,默認(rèn)是不自動創(chuàng)建menu目錄的,所以需要我們手動創(chuàng)建。菜單資源的根元素通常是<menu></menu>標(biāo)記,在該標(biāo)記中可以包含以下兩個子元素。<item></item>標(biāo)記:用于定義菜單項,可以通過如表7.2所示的各屬性來為菜單項設(shè)置標(biāo)題等內(nèi)容。表7-2<item></item>標(biāo)記的常用屬性7.7.1定義菜單資源文件屬性描述
android:id用于為菜單項設(shè)置ID,也就是唯一標(biāo)識
android:title用于為菜單項設(shè)置標(biāo)題
android:alphabeticShortcut用于為菜單項指定字符快捷鍵
android:numericShortcut用于為菜單項指定數(shù)字快捷鍵
android:icon用于為菜單項指定圖標(biāo)
android:enabled用于指定該菜單項是否可用
android:checkable用于指定該菜單項是否可選
android:checked用于指定該菜單項是否已選中
android:visible用于指定該菜單項是否可見
菜單資源文件通常應(yīng)該放置在res/menu目錄下,在說明:如果某個菜單項中,還包括子菜單中,可以在該菜單項中再包含<menu></menu>標(biāo)記來實現(xiàn)。<group></group>標(biāo)記:用于將多個<item></item>標(biāo)記定義的菜單包裝成一個菜單組,其說明如表7-3所示。表7-3<group></group>標(biāo)記的常用屬性例如,在res/xml目錄中,定義一個名稱為menus.xml的菜單資源文件,在該菜單資源中,包含3個菜單項和一個包含兩個菜單項的菜單組。menus.xml的具體代碼如下:<?xmlversion="1.0"encoding="utf-8"?><menuxmlns:android="/apk/res/android"><itemandroid:id="@+id/item1"android:title="更換背景"屬性描述android:id用于為菜單組設(shè)置ID,也就是唯一標(biāo)識android:heckableBehavior用于指定菜單組內(nèi)各項菜單項的選擇行為,可選值為none(不可選)、all(多選)和single(單選)android:menuCategory用于對菜單進(jìn)行分類,指定菜單的優(yōu)先級,可選值為container、system、secondary和alternativeandroid:enabled用于指定該菜單組中的全部菜單項是否可用android:visible用于指定該菜單組中的全部菜單項是否見說明:屬性描述android:id用于為菜單組設(shè)置ID,也就android:alphabeticShortcut="g"></item> <itemandroid:id="@+id/item2"android:title="編輯組件"android:alphabeticShortcut="e"></item>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程師資質(zhì)及經(jīng)驗證明書(5篇)
- 電子發(fā)票開具及報銷流程規(guī)定合同書
- 2025年音樂教育專業(yè)考試題及答案
- 2025年創(chuàng)新創(chuàng)業(yè)實踐與管理能力測試卷及答案
- 2025年甘肅省平?jīng)鋈A亭市策底鎮(zhèn)招聘專業(yè)化管理的村文書筆試備考試題及答案詳解1套
- 物資采購基本管理制度
- 特殊幼兒患病管理制度
- 特殊材料入庫管理制度
- 率土之濱團(tuán)隊管理制度
- 玩具掛件庫存管理制度
- 工模外發(fā)管理流程模板
- 部編版高一上冊語文第三課《百合花》課文原文教案及知識點
- 北京理工附中小升初分班考試真題
- 膀胱鏡檢查記錄
- 英語社團(tuán)活動課件
- 學(xué)前兒童發(fā)展心理學(xué)-情感
- 二年級下冊數(shù)學(xué)教案 《生活中的大數(shù)》練習(xí)課 北師大版
- GB∕T 16762-2020 一般用途鋼絲繩吊索特性和技術(shù)條件
- 電網(wǎng)施工作業(yè)票模板
- T∕CAEPI 31-2021 旋轉(zhuǎn)式沸石吸附濃縮裝置技術(shù)要求
- 國家級高技能人才培訓(xùn)基地建設(shè)項目實施管理辦法
評論
0/150
提交評論