第一步,向實現自訂標題列,需要在onCreate方法裡這樣寫
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
- setContentView(R.layout.main);
- getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
注意:
requestWindowFeature要在setContentView之前
getWindow().setFeatureInit最好在setContentView之後
第二步,就是寫好自己的布局檔案,實現標題列的自訂。
不過我們會遇到一些問題,就是標題列的高度不能自訂~下面就是解決辦法~
下面,我們看一下android title標題列 在源碼 framework中的XML檔案
screen_custom_title.xml
<LinearLayout android:orientation="vertical" android:fitsSystemWindows="true">
- <FrameLayout android:id="@android:id/title_container"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/windowTitleSize"
- style="?android:attr/windowTitleBackgroundStyle">
- </FrameLayout>
- <FrameLayout android:id="@android:id/content"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:foregroundGravity="fill_horizontal|top"
- android:foreground="?android:attr/windowContentOverlay"/>
- </LinearLayout>
screen_title.xml
<LinearLayout android:orientation="vertical" android:fitsSystemWindows="true">
- −
- <FrameLayout android:layout_width="match_parent"
- android:layout_height="?android:attr/windowTitleSize"
- style="?android:attr/windowTitleBackgroundStyle">
- <TextView android:id="@android:id/title"
- style="?android:attr/windowTitleStyle"
- android:background="@null"
- android:fadingEdge="horizontal"
- android:gravity="center_vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
- </FrameLayout>
- <FrameLayout android:id="@android:id/content"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:foregroundGravity="fill_horizontal|top"
- android:foreground="?android:attr/windowContentOverlay"/>
- </LinearLayout>
既然是自訂標題,那我們就看screen_custom_title.xml,裡面有一個title_container和一個content,組合成了標題列,我們自訂標題所給出的view,都被content作為子view了,影響不了那個title_container和content,所以,任你怎麼弄,它該留白的還是留白,你沒招。
看title_container有個style是這樣的:
style="?android:attr/windowTitleBackgroundStyle"
content的foreground是這樣的android:foreground="?android:attr/windowContentOverlay"
我們可以自己寫一個style
<resources xmlns:android="http://schemas.android.com/apk/res/android">
-
-
- <style name="CustomWindowTitleBackground">
- <item name="android:background">#00cc00</item>
- </style>
-
-
- <style name="test" parent="android:Theme">
- <item name="android:windowTitleSize">50dp</item>
- <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
- </style>
- </resources>
加入到AndroidManifest
<activity android:name=".CustomTitileBarActivity"
- android:label="@string/app_name" android:theme="@style/title_bar">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>