Android ApiDemos详解之App->Activity->Custom Title
开始之前需要先给大家解释一下,前两篇文章所用的都是2.3.3,但为了紧跟潮流,从这篇文章开始,SDK版本一致采用4.0,OK继续。
先来看看该例实现的功能:
(1).点击Custom Title
(2).该例子的布局包括如下两排控件,每一排都是由左边的一个EditText和右边的一个Button组成。功能为:点击”B2”,则将”A1”处文字改变为”B1”内的内容;同样,点击”C2”,则将”A2”处文字改变为”C1”内的内容。
看完该示例的功能图后先来分析一下Custom Title(继承Activity)内的主要代码:
public class CustomTitleextends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.custom_title);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1);
final TextView leftText = (TextView)findViewById(R.id.left_text);
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.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
leftText.setText(leftTextEdit.getText());
}
});
rightButton.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
rightText.setText(rightTextEdit.getText());
}
});
}
}
其中在
setContentView(R.layout.custom_title)
上有一句
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
requestWindowFeature(int)是用来设置Android应用程序窗体显示状态,其中int可以为如下选项值:
1.DEFAULT_FEATURES:系统默认状态,一般不需要指定
2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定
3.FEATURE_CUSTOM_TITLE:自定义标题。当需要自定义标题时必须指定。如:标题是一个按钮时
4.FEATURE_INDETERMINATE_PROGRESS:不确定的进度
5.FEATURE_LEFT_ICON:标题栏左侧的图标
6. FEATURE_RIGHT_ICON:标题栏右侧的图标
7.FEATURE_OPTIONS_PANEL:启用“选项面板”功能,默认已启用。
8.FEATURE_PROGRESS:进度指示器功能
9. FEATURE_NO_TITLE:无标题
本例中的Window.FEATURE_CUSTOM_TITLE指的就是“自定义标题”。其中需要注意的是:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.custom_title);
这两句的顺序不能颠倒,也就是说如果在该Activity已经setContentView(int)之后再去设置窗体显示状态则会导致程序crash.
下面来看
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title_1);
这一句是用来设置指定特征的特征值,在本例中则是为自定义窗体设置自定义的窗体布局。R.layout.custom_title_1这一id引用的则是layout/custom_title_1.xml布局文件,内容很简单,就是两个横向排列的TextView,代码如下:
<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">
<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" />
<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>
这里需要解释的一点是,虽然大家看到父容器RelativeLayout的android:orientation属性设置的值是”vertical”也即就是垂直排布元素,但是该容器内的两个TextView分别设置了android:layout_alignParentLeft="true"和android:layout_alignParentRight="true",因而也就分属于父容器的左右两侧了。
而在代码中的leftText和rightText这两个TextView,就是分别映射对应着上述布局文件中的左右两个TextView。
剩下的代码就非常简单了,两个按钮注册监听器,点击Change Left按钮,通过leftTextEdit.getText()方法获取EditText内的内容,并用leftText.setText()方法填充到窗体左边的显示状态上;点击ChageRight道理相同。