編輯:關於Android編程
樣式(style),是為一個視圖(View)或窗體(window)指定形狀和格式的屬性集。一個樣式能夠指定的屬性包括高度、內邊距、字體顏色、字體大小、背景顏色等等。樣式被定義在一個XML資源文件中,跟設置布局的XML資源文件是分開的。
Android中樣式的設計哲學跟web設計中的CSS(層疊樣式表)相似,就是想辦法讓設計和內容分隔開來。
例如,通過使用樣式(style),你可以將下面的XML布局:
簡化成:
所有的屬性都聯系到一個從布局文件中分離的樣式並且放到一個叫做CodeFont
的標簽定義中,然後使用style
屬性應用到布局中。在下面的板塊中,我們將會學習到style
標簽的定義。
主題(theme)是應用到整個活動(Activity)或應用(application),而不是單單一個視圖(正如樓上的例子一樣)。當一個樣式被用作主題時,所有在Activity或application中的view將應用每一個它所支持的樣式屬性。例如,你可以應用CodeFont
樣式作為一個Activity的主題,之後所有包含在這個Activity中的text將會是綠色的monospace字體。
為了創建一個樣式集,需要在你的項目的res/values
目錄中新建一個XML文件。這個XML文件可以隨意命名,但是要以.xml
為擴展名並且保存在res/values
文件夾中。這個XML文件的根節點必須是
。
對於每一個你建立的樣式,你需要添加一個帶有獨一無二的name
屬性(這個屬性是必須的)的
每一個
的子元素在編譯的時候都會轉化成一個應用資源對象,通過
如果你想要繼承自自定義的樣式,那你大可不必使用parent
屬性。取而代之,你可以父樣式的名字作為新樣式的前綴,用英文的點號“.”隔開。例如,為了創建一個繼承自上文定義的CodeFont
樣式的新樣式,顏色改為紅色,你可以這樣子寫:
需要說明的一點是在
這樣子就繼承了CodeFont
樣式和CodeFont.Red
樣式,並添加了android:textSize
屬性。
小貼士:這個技巧只在自己定義的樣式生效。你不可以用於Android內建的樣式中。引用內建的樣式,比如
TextAppearance
,你必須使用parent
屬性。
現在你知道了樣式是如何定義的,你還需要學習
元素中有哪些樣式屬性。你可能對一些屬性比較了解,比如layout_width和textcolor。然而,還有更多的屬性你可以使用。
發現應用於特定View的屬性的最好地方是找到相應的類參考文檔(class reference),它會列出所有支持的XML屬性。例如,列在TextView XML attributes表中的所有屬性可以用作TextView元素(或者它的子類)的樣式定義中。列在其中一個屬性是android:inputType
,所以你可以很正當地在
元素中寫下android:inputType
屬性,就像這樣:
取而代之,你也可以為EditText
元素創建一個style來包含這些屬性:
然後你的XML布局就可以實現這個style了:
這個簡單的例子看起來很多余,但是當你添加更多的樣式屬性並且使得它可以在不同的地方重用這個樣式,回報是巨大的。
要想知道所有可用的style屬性,你可以參看這裡R.attr。你得牢記於心的是並不是所有的View對象都接受相同的style屬性,所以你應該參照一下特定的View類所支持的樣式屬性。然而,當你應用一個style到View中,而這個View並不支持所有的style屬性,那麼這個View只會應用那些支持的屬性而忽略其它不支持的。
有些style屬性並不支持任何的View,而只能用作theme。這些style屬性應用到整個的窗體而不是任何類型的View。例如專門用於theme的style屬性可以隱藏應用標題,隱藏狀態欄或者改變窗體的背景。這些樣式屬性並不屬於任何一個View對象。為了找到這些theme專用的樣式屬性,你可以參見R.attr
中以window
開頭的屬性。比如說,windowNoTitle
和windowBackground
是只當style應用於Activity或application的主題時生效的style屬性。看看下一個版塊,了解如何應用一個style到theme。
小貼士:不要忘記給每個
元素添加
android:
命名空間作為前綴。例如:
有兩種方法來設置style:
對於單個的View,你可以通過在XML布局中添加style
屬性到一個View元素中;
或者,對於整個Activity或application,可以通過在Android manifest文件中添加android:theme
屬性到activity
或application
元素。
當你應用一個樣式到布局中單個的View
,樣式中定義的特性只會應用到這個View
。如果一個樣式被應用到一個ViewGroup
,那麼在其中的孩子View
將不會繼承這些樣式——只有你直接應用樣式的元素才會應用樣式中的特性。但是,你可以通過將樣式作為主題使用來達到對所有的View
元素使用同一種樣式。
為了應用一個style定義作為主題,你必須在Android manifest文件中為
Activity
或application
應用該樣式。之後,在Activity或者application中的每個View將會應用每一個它們所支持的樣式特性。例如,你應用上面所說的CodeFont
樣式到一個Activity
中之後,所有的支持這個文本樣式特性的View
元素將會應用之。任何不支持這個特性的View
將會忽略它們。假如有個View
只支持部分的特性,那麼它將只應用那部分的特性。
這裡有個例子,關於如何在XML布局中為一個View設置樣式的:
現在,這個TextView
就應用了一個叫CodeFont
的樣式(見上面的例子)
小貼士:
style
屬性不需要用android:
命名空間前綴。
為了給你的應用中的所有Activity設置一個主題,你需要打開AndroidManifest.xml
文件,然後編輯標簽,寫上
android:theme
屬性,用樣式名作為它的值。例如:
如果你想要單單為應用中的某個Activity設置主題,你只需要將上述的標簽改為就行了。
正如Android提供了其他的內建資源,為了減少開發人員的麻煩,它也提供了需要預定義的主題給你用。例如,你可以使用Dialog
主題使得你的Activity看起來像一個對話框:
或者如果你想要使背景透明,可以使用Translucent theme:
如果你喜歡一個整體,但是想要調整它,你只要將它作為你自定義主題的父主題(parent
)就行了。例如,你可以修改默認的亮主題以使用你自己的樣式:
#b0b0ff
(提示:這裡的顏色需要提過一個獨立的資源。因為android:windowBackground屬性只支持到另一個資源的引用;不像android:colorBackground,它不能通過十六進制的顏色值來設置)
現在在Android Manifest使用CustomTheme取代Theme.Light
新版本的Android 有附加的主題可以用到你的應用中,以便於兼容老的版本。你可以基於當前版本使用資源選擇器在不同的父主題中切換來自定義主題以達到兼容的目的。
例如,這裡有一個對於標准平台默認的亮主題的自定義聲明,寫在res/values
文件夾下的一個XML文件中(一般是res/values/styles.xml
)
為了使當應用運行在Android 3.0(API Level 11)或者更高版本時可以用上新的全息主題,你可以放置一個對主題備選的聲明的XML文件在res/values-v11
,父主題要改為全息主題:
現在使用這個主題就像您任何其他的,如果在Android3.0或更高版本上運行你的應用程序會自動切換到全息主題。
有一個標准屬性表,顯示了所以你可以在主題中使用的屬性,你可以在R.styleable.Theme中找到。
更多有關提供替代資源,比如主題和布局的基礎上,平台版本或其他設備配置的詳細信息,請參閱參考 Providing Resources文檔。
Android平台提供了一個很大的樣式和主題集,以便於你可以在你的應用中使用。你可以在R.style類中找到一個所有可用的樣式的參考。為了使用列表中的樣式,用一個英文句號取代在樣式名中的所有下劃線(?)。例如,你可以用@android:style/Theme.NoTitleBar
來應用Theme.NoTitleBar
主題。
然而,R.style參考並不是文檔齊全的,它沒有完全描述這些樣式,所以看這些樣式和主題的源代碼會讓你更好的他們各自提供的樣式特性。在下面可以看到:
- Android Styles (styles.xml)
- Android Themes (themes.xml)
一、直接看效果二、直接上代碼1.自定義控件部分package com.susan.project.myapplication;import android.app.Act
最近對android中的動畫特別感興趣,可能是因為比較喜歡跟UI相關的東西吧。這篇文章將簡單的介紹下ViewPropertyAnimator這個類的源碼和一些使用。簡述V
大家啊從Eclipse轉到Android Studio很不習慣吧,感覺還是用Eclipse的方法注釋模板比較方便,敲/**加回車,模板就加載出來了,而Android St
今天終於把老大交代的任務搞完了,感覺收獲挺多的,所以就寫一篇來記錄一下吧,首先還是來看一下,老大們的需求 需求: 希望移動端的用戶標識(IMEI)和HTML頁面的用戶