Android 自定義標題欄

weixin_34119545發表於2015-01-13

1.對指定的android activity設定自定義主題風格,其中自定義主題風格是關鍵,在android 4.0以上版本中如果使用Theme.Holo或者Theme.Light等,程式會一直報錯誤-you cannot combine custom title with other

feature titles。

2. 在對應的Activity中加入程式碼   

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.mycustomtitle);

3.在styles.xml使用如下的自定義主題,發現只有使用這個預設主題才不出第一步的

錯誤

<resources>

    <style name="WindowTitleBackground" >   
        <item name="android:background">@color/blue</item>       
    </style>
    <style name="MyTheme" parent="android:Theme">
        <item name="android:windowTitleSize">60dp</item>
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>                
    </style>

</resources>

4. 使用RelativeLayout來對齊自定義Title的元件

二:測試MainActivity原始碼

package com.gloomyfish.titledemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.mycustomtitle);
    }
    
}

三:XML資原始檔

mycustomtitle.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_gravity="fill_horizontal"
    android:orientation="horizontal"
    android:layout_height="fill_parent" >
    <Button  android:id="@+id/header_left_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="5dp"
        android:layout_centerVertical="true"
        android:text="返回"
        android:textColor="#000000"/>
    
        <TextView android:id="@+id/header_text"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_toRightOf="@+id/header_left_btn"
            android:layout_toLeftOf="@+id/header_right_btn"
            android:text="My Title Bar"
            android:textSize="20sp"
            android:textStyle="bold"
            android:textColor="#FFFFFF"
            android:gravity="center"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:singleLine="true" />
           
        <Button  android:id="@+id/header_right_btn"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentRight="true"
             android:layout_marginRight="5dp"
             android:layout_centerVertical="true"
             android:text="圖片"  
             android:textColor="#000000"/>

</RelativeLayout>

最後別忘記在androi的manifest配置檔案中加上自定義的主題:

android:theme="@style/MyTheme"

同時還要刪除IDE預設生成的那些appTheme,不然也會一直報錯!

最終效果如下:

實現這個自定義標題欄的時候,看到stackoverflow上面說

如果使用Theme.Holo一定要換成Theme.Holo.NoActionBar主題

可以我換了以後發現,一直不出效果。

所以我推薦一定要使用android:theme

 

相關文章