android通過自定義theme個性化標題欄並且文字居中
安卓預設的標題欄黑乎乎非常難看。不過可以通過theme來自定義標題欄樣式。
在一次專案中需要把顏色修改為藍色,高度40dp,標題文字居中的效果,不過網上沒有搜到好的解決方法,又不想用自定義標題欄。所以把自己想出來的方法記下來。
步驟如下:
1.首先在values資料夾下建立colors.xml檔案,內容如下:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" > <color name="blue">#ff004B97</color> </resources>
2.在styles.xml檔案中新增以下程式碼:
<style name="CustomTextApperance" > <item name="android:textColor">#fff</item> <item name="android:textSize">18sp</item> <item name="android:textStyle">bold</item> </style> <style name="CustomWindowTitle" parent="*android:WindowTitle"> <item name="android:textAppearance">@style/CustomTextApperance</item> </style> <style name="CustomTitleBackground" parent="*android:WindowTitleBackground"> <item name="android:background">@color/blue</item> </style> <!-- Application theme. --> <style name="CustomAppTheme" parent="android:Theme.Light"> <item name="android:windowTitleStyle">@style/CustomWindowTitle</item> <item name="android:windowTitleBackgroundStyle">@style/CustomTitleBackground</item> <item name="android:windowTitleSize">40dp</item> </style>
其中和title相關的屬性有
android:windowTitleStyle:設定標題樣式,這個主要是設定顯示標題文字的Textview的各項樣式。
windowTitleBackgroundStyle:設定標題欄背景色。通過屬性android:background設定,注意此屬性需要為drowable資源,直接寫類似#ff234562的顏色值將無效,所以需要將顏色值先定義到colors.xml檔案中。
android:windowTitleSize:設定標題高度。
然後在AndroidManifest.xml中設定application的theme為android:theme="@style/CustomAppTheme"
經過上面的設定可以實現藍色背景,高度40dp的標題欄,但是此時標題還沒有居中。我曾經嘗試在style中通過設定android:gravity=center等方式,但都沒有成功。
後來在activity的程式碼中新增以下程式碼才實現了居中效果:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView view = (TextView) findViewById(android.R.id.title);view.setGravity(Gravity.CENTER);
setContentView(R.layout.activity_main);
...
}
其中顏色程式碼為新增的程式碼。CSDN程式碼沒法上色。。。。。。
最終效果圖:
效果實現了,但是在實際使用中卻發現,每次開啟介面的時候,標題文字仍然會靠左一段時間,然後才變為居中。這是因為標題欄在執行activity的onCreate方法前就顯示出來了,而我們是在onCreate方法中設定的標題欄文字居中。最後無奈的解決方法是將標題欄的文字顏色修改為和標題欄背景色一樣。然後再在onCreate方法中同時設定居中和標題顏色為白色。這樣的效果為啟動介面的前一小會看不到標題,然後出現居中的標題。