Android自带的标题栏样式非常的单调,有时候会想要自定义自己的标题栏样式,但是Android默认是不允许设定标题栏样式的,所以需要手动去设置它:
首先,在java代码onCreate方法中【代码的顺序必须按照以下排,否则会没有效果】:
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); //设置自定义标题栏时必须先指定此变量
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title); //设置标题栏布局为自己的自定义布局
其中,requestWindowFeature还有其它许多变量:
DEFAULT_FEATURES:系统默认状态,一般不需要指定
FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定
FEATURE_CUSTOM_TITLE:自定义标题。当需要自定义标题时必须指定。如:标题是一个按钮时
FEATURE_INDETERMINATE_PROGRESS:不确定的进度
FEATURE_LEFT_ICON:标题栏左侧的图标
FEATURE_NO_TITLE:无标题
FEATURE_OPTIONS_PANEL:启用“选项面板”功能,默认已启用。
FEATURE_PROGRESS:进度指示器功能
FEATURE_RIGHT_ICON:标题栏右侧的图标
接着自定义标题栏的布局文件title.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/app_name"
android:gravity="center"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置"/>
</LinearLayout>
直到这一步,我们只是换了标题栏的布局,并不能改变它的高度或者背景颜色,因此可以通过再定义style来设置:
在style.xml中:
<style name ="CustomWindowTitleBackground">
<item name ="android:background">#1F497D</item>
</style>
<style name="title" parent="android:Theme">
<item name ="android:windowTitleSize">45dp</item>
<item name ="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
</style>
最后,还要将该样式设置到Activity中,在AndroidManifest.xml中: