Android开发如何在4.0及以上系统中自定义TitleBar

有时候,我们希望能改变一下这样单调的状况。比如,要在标题栏中增加一个用于美化界面的图标、增一个输入框或按钮之类的,怎样才能做到这一点呢?我们不妨来看一个自定义TitleBar的实际例子。

AD:2014WOT全球软件技术峰会北京站 课程视频发布


本文将通过一个实例讲解怎么实现在4.0及以上系统版本中实现自定义TitleBar,这只是我自己找到的一种方法;

xml布局文件

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     tools:context=".MainActivity" >      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="@string/hello_world" /> </RelativeLayout>

自定义的Titlebar的布局文件titlebar.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="48dp"     android:orientation="horizontal" >     <ImageView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center"         android:layout_weight="1.5"         android:src="@drawable/ic_action_search" />     <TextView         android:layout_width="wrap_content"         android:layout_height="48dp"         android:layout_weight="1.5"         android:paddingTop="1dp"         android:text="@string/app_name"         android:textSize="14sp" />     <EditText         android:id="@+id/searchparameter"         android:layout_width="wrap_content"         android:layout_height="48dp"         android:layout_margin="1dp"         android:layout_weight="5"         android:text="ABCDEFGHIJ"         android:textSize="14sp" />     <Button         android:id="@+id/button"         android:layout_width="wrap_content"         android:layout_height="48dp"         android:layout_margin="1dp"         android:layout_weight="2"         android:text="OK"         android:textSize="14sp" /> </LinearLayout>

为布局文件修改style.xml

此处的style.xml在values-11或者value-14中,否侧会报错:you cannot combine custom titles with other title features

<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android">     <style name="CustomizedWindowTitleBackground">         <item name="android:background">#047BF0</item>     </style>     <style name="titlebarstyle" parent="android:Theme">         <item name="android:windowTitleSize">48dp</item>         <item name="android:windowTitleBackgroundStyle">@style/CustomizedWindowTitleBackground</item>         <!-- All customizations that are NOT specific to a particular API-level can go here. -->     </style> </resources>

在AndroidManifest.xml添加主题样式

android:theme="@style/titlebarstyle"

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.example.titlebardemo"     android:versionCode="1"     android:versionName="1.0" >     <uses-sdk         android:minSdkVersion="8"         android:targetSdkVersion="17" />     <application         android:allowBackup="true"         android:icon="@drawable/ic_launcher"         android:label="@string/app_name" >         <activity             android:name="com.example.titlebardemo.MainActivity"             android:label="@string/app_name"            android:theme="@style/titlebarstyle" >             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>     </application> </manifest>

MainActivity.java中添加实现代码

protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);         setContentView(R.layout.activity_main);         getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,                 R.layout.titlebar);     }

代码中requestWindowFeature(Window.FEATURECUSTOMTITLE);和getWindow().setFeatureInt(Window.FEATURECUSTOMTITLE,
R.layout.titlebar);位置是固定的.

希望读者朋友们通过这个例子能够对怎么实现在4.0及以上系统版本中自定义TitleBar有深刻理解和掌握。

转载自:http://mobile.51cto.com/aprogram-387074.htm

你可能感兴趣的:(android,开发,标题栏,软件技术,北京站)