本例演示如何把一个自定义的UI布局放到的Activity主窗口的布局中,并替换默认的标题。
1. 定义清单文件(AndroidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.android.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<!-- 用android:windowSoftInputMode属性设置Activity主窗口与软键盘的交互模式
stateVisible:软键盘在适当的时候是可见的,通常是在用户用户进入Activity主窗口,准备输入的时候
adjustPan:Activity主窗口不会针对软键盘调整尺寸,而是在软键盘遮挡住当前输入域时,自动的平移
Activity窗口的内容,以便用户能够看到输入域。
-->
<activity android:name=".CustomTitle"
android:label="@string/app_name"
android:windowSoftInputMode="stateVisible|adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="9" />
</manifest>
2. 定义字符串资源(strings.xml)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, CustomTitle!</string>
<string name="app_name">CustomTitle</string>
<string name="custom_title_left">Left is best</string>
<string name="custom_title_right">Right is always right</string>
<string name="custom_title_left_button">Change Left</string>
<string name="custom_title_right_button">Change Right</string>
</resources>
3. 定义Activity的主窗口布局(custom_title.xml)
<?xml version="1.0" encoding="utf-8"?>
<!-- Activity主窗口布局,含有两个文本输入域和两个按钮 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- android:baselineAligned=false防止布局跟它的子对象的基线对齐 -->
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false">
<!-- android:maxEms设定最大的字符宽度
android:minEms设定最小的字符宽度
android:layout_gravity设置布局的重心
-->
<EditText android:id="@+id/left_text_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxEms="10"
android:minEms="10"
android:layout_gravity="center_vertical"
android:text="@string/custom_title_left" />
<Button android:id="@+id/left_text_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/custom_title_left_button"/>
</LinearLayout>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false">
<EditText android:id="@+id/right_text_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxEms="10"
android:minEms="10"
android:layout_gravity="center_vertical"
android:text="@string/custom_title_right" />
<Button android:id="@+id/right_text_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/custom_title_right_button"/>
</LinearLayout>
</LinearLayout>
4. 定义窗口标题的布局(custom_title_1.xml)
<?xml version="1.0" encoding="utf-8"?>
<!-- 使用这个布局替代默认的Activity窗口标题 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<!-- 居左显示文本。android:layout-alignParentLeft="true" -->
<TextView android:id="@+id/left_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="@string/custom_title_left" />
<!-- 居右显示文本。android:layout-alignParentRight="true" -->
<TextView android:id="@+id/right_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/custom_title_right" />
</RelativeLayout>
5. 创建Activity类(CustomTitle.java)
package my.android.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
publicclass CustomTitle extends Activity {
/** Activiy首次创建时,调用这个方法*/
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//请求修改窗口的标题
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
//填充布局
setContentView(R.layout.custom_title);
//用自定义的布局替换默认的Activity主窗口的布局
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1);
//获取自定义标题中左侧的文本View对象
final TextView leftText = (TextView)findViewById(R.id.left_text);
//获取自定义标题中右侧的文本View对象
final TextView rightText = (TextView)findViewById(R.id.right_text);
//获取编辑左侧标题的文本域对象
final EditText leftTextEdit = (EditText)findViewById(R.id.left_text_edit);
//获取编辑右侧标题的文本域对象
final EditText rightTextEdit = (EditText)findViewById(R.id.right_text_edit);
//获取确认左侧标题编辑结果的按钮对象
Button leftButton = (Button)findViewById(R.id.left_text_button);
//获取确认右侧标题编辑结果的按钮对象
Button rightButton = (Button)findViewById(R.id.right_text_button);
//设置leftButton按钮的Click点击事件监听器
leftButton.setOnClickListener(new OnClickListener() {
publicvoid onClick(View v){
leftText.setText(leftTextEdit.getText());
}
});
//设置rightButton按钮的Click点击事件监听器
rightButton.setOnClickListener(new OnClickListener(){
publicvoid onClick(View v){
rightText.setText(rightTextEdit.getText());
}
});
}
}