近日
需要在android的標題列上添加按鈕,所以對android的標題列進行了一下簡單的研究~
第一步,向實現自訂標題列,需要在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>
PS:做的略顯粗糙,不過以能實現功能為主~~