这段代码有个问题:onOptionsItemSelected()是一个当任何菜单项被选择时都会调用的普通方法。你需要给onOptionsItemSelected()一种区别菜单项并执行相应代码的方法。因此,使用switch/case声明,来帮助方法选择不同的菜单项。当你创建菜单项时,你指定了从0到5的一些列数字作为菜单项的值。你可以在case声明中调用getId()来区别哪个菜单项背选中了。
switch (item.getId()) {
case 0:
return true;
case 1:
return true;
case 2:
return true;
case 3:
return true;
case 4:
return true;
case 5:
return true;
}
return true;
在这个声明中,每个id的动作都返回true。这除了打开你需要添加代码的区域外,啥也没干。你的AndroidViews.java文件现在已经适合创建爱你新菜单系统能启动的Activity了。AndroidViews.java的全部代码应该看起来像这样:
package android_programmers_guide.AndroidViews;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class AndroidViews extends Activity {
/** Called when the Activity is first created. /
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
/** Add one menu item for each View in our project */
menu.add(0, 0, "AutoComplete");
menu.add(0, 1, "Button");
menu.add(0, 2, "CheckBox");
menu.add(0, 3, "EditText");
menu.add(0, 4, "RadioGroup");
menu.add(0, 5, "Spinner");
return true;
}
/** Override onOptionsItemSelected to execute code for each
menu item */
@Override
public boolean onOptionsItemSelected(Menu.Item item){
/** Select statement to handle calls
to specific menu items */
switch (item.getId()) {
case 0:
return true;
case 1:
return true;
case 2:
return true;
case 3:
return true;
case 4:
return true;
case 5:
return true;
}
return true;
}
}
完成AndroidViews.java后,你可以重点创建你的其它Activity。下面的章节中,你会在项目中为每个视图创建一个Activity,并在case声明中添加代码来启动这些视图的Activity。
创建自动完成的Activity
本节,你会创建一个Activity来展示AutoCompleteTextView。AutoCompleteTextView会成为你开发的强大工具。这个视图对充分利用Android有限的主屏空间非常有用。
AutoCompleteTextView,顾名思义,是一个修改过的TextView,当输入一个单词或词组时它会提示一些可能的值。这种视图在移动应用中非常有用,特别当你不想为ListView预留空间,或者将加快向应用中输入文本的进程。
要创建AutoCompleteTextView,你需要添加一个新的.xml布局文件,添加一个.java文代码件,和一个处理通话的Intent 过滤器。
创建一个autocomplete.xml文件
在AndroidView项目中创建一个名为autocomplete.xml的.xml文件。注意文件名必须全部小写。文件会出现在Package Explorer中的layout文件夹。双击文件进行编辑。
这个文件用来控制AutoCompleteTextView Activity的图层,所以你的图层中需要有一个AutoCompleteTextView。添加AutoCompleteTextView的XMl看起来像:
<AutoCompleteTextView android:id="@+id/testAutoComplete"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
你已经在.xml文件中创建了一些视图,所以你应该熟悉这种格式,AutoCompleteTextView也没啥不同。将id设置为testAutoComplete,将宽与高分别设置为fill_parent和wrap_content。
你也应该为两个按钮添加图层。这些按钮用来控制你改变的属性。将属性命名为autoCompleteTextView和textColorButton,如下:
<Button android:id="@+id/autoCompleteButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Change Layout"/>
<Button android:id="@+id/textColorButton"
android:layout_width="fill_parent
android:layout_height="wrap_content"
android:text="Change Text Color"/>
当添加三个视图layout后,最终的autocomplete.xml文件应该看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<AutoCompleteTextView android:id="@+id/testAutoComplete"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<Button android:id="@+id/autoCompleteButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Change Layout"/>
<Button android:id="@+id/textColorButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Change Text Color"/>
</LinearLayout>
创建一个autocomplete.java文件
参照前面的“创建一个新的.java文件”章节的提示,来创建你的autocomplete.java文件。
你要做的第一件事,就是味你的视图导入包。在这个Activity中,你要用到两个视图,AutoCompleteTextView和Button。你需要用到Colors和igeArrayAdapter。因此在你的Activity中导入如下的包:
package android_programmers_guide.AndroidViews;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.graphics.Color;
为autocomplete.java的AutoComplete类添加初始化结构。
public class AutoComplete extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
}
}
这个类给为你创建Activity的其余部分打下了基础。这个Activity中的所有功能都会给予这个类构建。你要做的第一件事就是从autocomplete.xml中加载图层。
setContentView(R.layout.autocomplete);
该例中,你会创建AutoCompleteTextView,它包含一个月份列表。当用户在框中输入时,它会匹配你要输入的月份。由于AutoCompleteTextView包含了一个月份列表,你需要创建一个能与AutoCompleteTextView相关的列表。创建一个字符串数组,并为它分配月份值:
static final String[] Months = new String[]{
"January","February","March","April","May","June","July","August",
"September","October","Nove mber","December"
};
下个任务就是将字符串数组赋给AutoCompleteTextView。你已经创建了不止一个视图,所以创建AutoCompleteTextView的代码应该非常熟悉。你之前所没见到过的是为视图分配字符串数组的代码:
ArrayAdapter<String> monthArray = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, Months);
final AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.testAutoComplete);
textView.setAdapter(monthArray);
第一行中,你调用了你创建的字符串数组,并将它赋给名为monthArray的ArrayAdapter。
下面的一段代码实例化了两个按钮。这根前面章节中用到的代码相同。唯一的区别是你调用了两个尚未被创建的方法:changeOption和changeOption2。
final Button changeButton = (Button) findViewById(R.id.autoCompleteButton);
changeButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v){
changeOption(textView);
}
});
final Button changeButton2 = (Button)
findViewById(R.id.textColorButton);
changeButton2.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v){
changeOption2(textView);
}
});
被这些按钮调用的方法用来改变AutoCompleteTextView上的布局属性。我所选择改变的那两个属性是布局的高和文本的颜色。你会安装这些按钮的某个,将AutoCompleteTextView的布局高度反复改为30和100。另一个按钮用来将视图中文本的颜色改变为红色。
ChangeOption()功能会改变AutoCompleteTextView的布局高度。这个功能的代码非常简单:
public void changeOption(AutoCompleteTextView text){
if (text.getHeight()==100){
text.setHeight(30);
}
else{
text.setHeight(100);
}
}
这个功能中你所做的就是检测AutoCompleteTextView的当前高度。如果高度为100,则将其设置为30,否则设置为100。
ChangeOption2()的功能同样简单:
public void changeOption2(AutoCompleteTextView text){
text.setTextColor(Color.RED);
}
这个功能仅仅将AutoCompleteTextView的文本颜色设置为Color.RED,Color.RED的值从android.graphics.Color包中导入。你可以浏览这个包,改颜色改变为任何值;我选择RED所以它会醒目一些。
你完整的autocomplete.java文件应该看起来像这样:
package android_programmers_guide.AndroidViews;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.graphics.Color;
public class AutoComplete extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.autocomplete);
ArrayAdapter<String> monthArray = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, Months);
final AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.testAutoComplete);
textView.setAdapter(monthArray);
final Button changeButton = (Button)
findViewById(R.id.autoCompleteButton);
changeButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v){
changeOption(textView);
}
});
final Button changeButton2 = (Button)
findViewById(R.id.textColorButton);
changeButton2.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v){
changeOption2(textView);
}
});
}
static final String[] Months = new String[]{
"January","February","March","April","May","June","July","August",
"September","October","November","December"
};
public void changeOption(AutoCompleteTextView text){
if (text.getHeight()==100){
text.setHeight(30);
}
else{
text.setHeight(100);
}
}
public void changeOption2(AutoCompleteTextView text){
text.setTextColor(Color.RED);
}
}
创建一个Intent过滤器
在你运行这个应用之前你要做的最后一件事就是在AndroidManifes.xml中建立Intent过滤器。然后你就可以从前面图8-1所示的Menu中调用Intent了。Intent过滤器的代码如下所示:
<activity android:name=".AutoComplete" android:label="AutoComplete">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>