在开发Android 程序时候发现标题栏 TitleBar 区域很单调,如果想个性化一些可以通过为标题定制一个 layout 布局 文件,比如浏览器的标题栏,它包含了网站的 Favicon ,自定义的进度条,和不确定的进度指示等等,下面代码在 onCreate 中使用,同时顺序不要改变,否则将无法生效 :
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /*--自定义标题样式--*/ requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.login); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1); }
这样虽然可以在一定程度上定制标题栏 , 不过 , 这里无法改变标题栏的高度和背景 ( 背景设置之后会在两端有两个非常难看的边框 ). 据说 , 原因是 android 固有的 .
这里有修改方法 :
原理是这样的 . 直接像上述代码那样添加 title 仅仅是把一个子界面添加到原有的 title 上的 , 并没有改变原来的属性 , 比如 标题栏大小 , 标题栏背景 . 这些需要在 theme 主题里面定义 .
因此先定义一个 style, 若修改背景请修改 android:windowTitleBackgroundStyle
若修改标题栏高度 , 请修改 android:windowTitleSize
例子 :
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <mce:style name="CustomWindowTitleBackground"><!-- <item name="android:background">#565656</item> --></mce:style><style name="CustomWindowTitleBackground" mce_bogus="1"> <item name="android:background">#565656</item></style> <mce:style name="test" parent="android:Theme"><!-- <item name="android:windowTitleSize">50dp</item> <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item> --></mce:style><style name="test" parent="android:Theme" mce_bogus="1"> <item name="android:windowTitleSize">50dp</item> <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item></style> </resources>
在程序的 android manifest.xml 中对应 activity 中添加属性 android:theme = "@style/test" 就可以了
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.guardian" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" > <activity android:name=".Guardian" android:label="@string/app_name" android:theme = "@style/test" //就在这里 > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" />
下面标题布局文件
跟一般的布局文件没什么区别
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/lg_title_bg"> <ImageView android:id="@+id/title_left_btn" android:layout_width="75dip" android:layout_height="wrap_content" android:background="@drawable/lg_title"/> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="20dip" android:textStyle="bold" android:textColor="#ddd" android:layout_gravity="center" android:gravity="center" android:paddingLeft="8dip" android:paddingRight="8dip"/> </LinearLayout>
效果如下: