第八章 列表、菜单以及其它视图——中

这段代码有个问题:onOptionsItemSelected()是一个当任何菜单项被选择时都会调用的普通方法。你需要给onOptionsItemSelected()一种区别菜单项并执行相应代码的方法。因此,使用switch/case声明,来帮助方法选择不同的菜单项。当你创建菜单项时,你指定了从05的一些列数字作为菜单项的值。你可以在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来展示AutoCompleteTextViewAutoCompleteTextView会成为你开发的强大工具。这个视图对充分利用Android有限的主屏空间非常有用。

AutoCompleteTextView,顾名思义,是一个修改过的TextView,当输入一个单词或词组时它会提示一些可能的值。这种视图在移动应用中非常有用,特别当你不想为ListView预留空间,或者将加快向应用中输入文本的进程。

要创建AutoCompleteTextView,你需要添加一个新的.xml布局文件,添加一个.java文代码件,和一个处理通话的Intent 过滤器。

 

创建一个autocomplete.xml文件

AndroidView项目中创建一个名为autocomplete.xml.xml文件。注意文件名必须全部小写。文件会出现在Package Explorer中的layout文件夹。双击文件进行编辑。

这个文件用来控制AutoCompleteTextView Activity的图层,所以你的图层中需要有一个AutoCompleteTextView。添加AutoCompleteTextViewXMl看起来像:

<AutoCompleteTextView android:id="@+id/testAutoComplete"

android:layout_width="fill_parent"

 android:layout_height="wrap_content"/>

你已经在.xml文件中创建了一些视图,所以你应该熟悉这种格式,AutoCompleteTextView也没啥不同。将id设置为testAutoComplete,将宽与高分别设置为fill_parentwrap_content

你也应该为两个按钮添加图层。这些按钮用来控制你改变的属性。将属性命名为autoCompleteTextViewtextColorButton,如下:

<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中,你要用到两个视图,AutoCompleteTextViewButton。你需要用到ColorsigeArrayAdapter。因此在你的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.javaAutoComplete类添加初始化结构。

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);

第一行中,你调用了你创建的字符串数组,并将它赋给名为monthArrayArrayAdapter

下面的一段代码实例化了两个按钮。这根前面章节中用到的代码相同。唯一的区别是你调用了两个尚未被创建的方法:changeOptionchangeOption2

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的布局高度反复改为30100。另一个按钮用来将视图中文本的颜色改变为红色。

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.REDColor.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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值