一.前言
在android項(xiàng)目中的styles.xml主要是用來設(shè)置app的全局或者是部分Activity樣式的柠贤,之前一直對(duì)這一塊的xml一頭霧水俐载,所以在這里記錄一下有關(guān)styles的使用方法和常用屬性。
二.使用方法
首先新建一個(gè)android project,打開它的styles.xml文件,默認(rèn)的xml代碼如下:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">#fff</item>
</style>
</resources>
其中style:name
是定義的style的名字,在這個(gè)style的內(nèi)部會(huì)有許多自定義的item蒙兰,其中初始狀態(tài)下的三個(gè)屬性所代表的顏色區(qū)域如下圖:
我們可以自己來定義自己的style,具體的定義方法和上述代碼相似芒篷,只不過需要更改style的name屬性:
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">#FA7298</item>
<item name="colorPrimaryDark">#FA7298</item>
<item name="colorAccent">#fff</item>
</style>
如果想要在布局文件中使用主題搜变,則可以直接android:theme="@style/MyTheme"
即可。
在自定義style時(shí)针炉,item里面的name可以是我們自定義的挠他,也可以是android布局里面自帶的屬性,例如:
<style name="MyTheme2" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textSize">20dp</item>
<item name="android:layout_width">20dp</item>
<item name="android:layout_height">20dp</item>
</style>
在MyTheme2中設(shè)定了android布局里面自帶的的三種屬性篡帕,所以在寫布局文件的時(shí)候就不用一項(xiàng)一項(xiàng)寫绩社,直接引入style即可得到同樣的效果摔蓝,而且大大減少了代碼量。
三.設(shè)置style
1.動(dòng)態(tài)設(shè)置style
如果App想要實(shí)現(xiàn)切換主題的功能愉耙,則可以在activity中使用setTheme()
方法贮尉,在方法中將具體的style傳進(jìn)去即可來更新主題,但是需要注意的是setTheme()方法必須要在setContentView()方法之前進(jìn)行調(diào)用F友亍2卵琛!赌渣,否則會(huì)設(shè)置失效:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.MyTheme);
setContentView(R.layout.activity_main);
......
}
如果想要實(shí)現(xiàn)點(diǎn)擊之后進(jìn)行主題的切換魏铅,則需要在調(diào)用setTheme()
方法之后調(diào)用recreate()
方法即可,不過App畫面可能會(huì)有瞬間的閃爍:
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.change:
setTheme(R.style.MyTheme);
recreate();
break;
}
}
2.靜態(tài)設(shè)置theme
靜態(tài)設(shè)置activity的樣式也很簡單坚芜,就是在AndroidManifest中給指定的activity中添加android:theme
屬性即可:
<activity android:name=".MainActivity"
android:label="yzbkaka"
android:theme="@style/MyTheme">
......
四.系統(tǒng)自帶style
Android系統(tǒng)中也自帶的有許多的style览芳,下面來看看比較常用的style。
@style/Theme.AppCompat.Dialog.Alert
@style/Theme.AppCompat.Light.Dialog.Alert
五.關(guān)于item的name屬性
前面說道鸿竖,item里面的name
一般是布局文件里面已經(jīng)有的屬性沧竟,比方說layout_width,layout_height
等等,但是在name里面我們也可以設(shè)置自己的屬性缚忧,但是一般是用在我們的自定義View上面悟泵。
推薦閱讀:https://blog.csdn.net/Ithink213/article/details/88315283