Android开发从入门到精通(8) _4
为AutoComplete创建一个活动 第八章(4)
在本节中,你将创建一个突出AutoCompleteTextView的活动。AutoCompleteTextView对你的有应用程序来说可以成为一个非常有力的工具。特别是对于Android主屏幕有限的空间来说。
AutoCompleteTextView,正如这个名字所说,是修改后的TextView,而它可以参考到可用的单词或者短语并自动完成输入。这样的Views是在移动应用程序里是非常有用的当你不想花费大量的空间到一个ListView,或者你想要加速你输入文本的过程。
要开始为AutoCompleteTextView创建活动,你需要为布局增加一个新的.xml文件,为代码增加一个.java文件,并且一个Intent过滤器来处理呼叫。
提示
创建这些条目的过程出现在本章“构造活动”一节中。创建下面项目的部分时可以参考那个部分。
创建一个autocomplete.xml文件 在你的AndroidViews项目中创建一个新的.xml文件,并命名为autocomplete.xml。记住文件名必须用小写。这个文件应当出现在layout文件夹。双击这个文件来编辑它。这个文件会控制AutoCompleteTextView活动的布局,所以你需要在布局中有一个AutoCompleteTextView。增加过AutoCompleteTextView的XML文件应当如下:
<AutoCompleteTextView android:id="@+id/testAutoComplete" android:layout_width="fill_parent" android:layout_height="wrap_content"/> |
你已经在.xml文件中创建了几个Views了,所以你应当熟悉这个格式。对于AutoCompleteTextView,没什么特别之处。你设定id到testAutoComplete,还有相应的宽度和高度到fill_parent和wrap_content,还应该为两个按钮增加布局。这些按钮将被用于你将改变的属性控制。命名按钮为autoCompleteButton和textColorButton,如下:
<Button android:id="@+id/autoCompleteButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ChangeLayout"/> <Buttonandroid:id="@+id/textColorButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Change Text Color"/> |
有了新增的三个View布局,你完成的autocomplete.xml文件看上去应该像这样:
<?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <AutoCompleteTextViewandroid:id="@+id/testAutoComplete" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <Buttonandroid:id="@+id/autoCompleteButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ChangeLayout"/> <Buttonandroid:id="@+id/textColorButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ChangeTextColor"/> </LinearLayout> |
创建一个autocomplete.java文件 跟从本章“创建一个新的java文件”的介绍。第一件要做的事就是为你的Views输入包装。在这个活动中,使用了两个Views,AutoCompleteTextView 和按钮。你还需要设置颜色和一个ArrayAdapter。因此,输入下面包装到活动中:
package android_programmers_guide.AndroidViews; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.ArrayAdapter; importandroid.widget.AutoCompleteTextView; importandroid.widget.Button; import android.graphics.Color; |
注意
现在你可能不知道它们的用途,先加入它们吧,我会解释的。
为AutoCOmplete类增加初始的结构到autocomplete.java文件中:
public class AutoComplete extends Activity { @Override publicvoidonCreate(Bundleicicle){ super.onCreate(icicle); } } |
这个类给了你建造活动其它部分的基础。这个活动的所有功能将会被围绕这个类建造。第一件要做的事就是从autocomplete.xml中装载布局:
setContentView(R.layout.autocomplete); |
对于本例,将创建AutoComplete TextView,所以它包含一年中的月份。当一个用户在框中输入,它会猜测那个月份用户试图去输入。假定AutoComplete TextView将包含月份的清单,你需要来创建一个可以被赋值到AutoCompleteTextView的清单。
创建字符串数组并赋值月份数值到其中:
static final String[] Months = new String[]{ "January","February","March","April","May","June","July","August", "September","October","November","December" }; |
下一个任务是复制这个字符串到AutoCompleteTextView。到目前为止,你已经创建了一些Views了。所以,创建AutoCompleteTextView的代码看上去应该很熟悉。你之前没看到过的就是把字符串赋值给View:
ArrayAdapter<String> monthArray = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,Months); finalAutoCompleteTextViewtextView=(AutoCompleteTextView) findViewById(R.id.testAutoComplete); textView.setAdapter(monthArray); |
在第一行,拿去创建的字符串数组并且复制到一个名为monthArray的ArrayAdapter。下一步,你通过在.xml文件中定位来例示AutoCompleteTextView。最后,使用setAdapter()方法来赋值monthArray ArrayAdapter 到AutoCompleteTextView中。
下一个零星的代码例示那两个按钮。与上一章的代码相同。唯一和你所写代码不同的是你正在呼叫两个函数,changeOption 和 changeOption2,而这些,你还没有创建呢。
注意
你在传递AutoCompleteTextView 到函数呼叫。当你创建函数还需要创建参数。
final Button changeButton = (Button) findViewById(R.id.autoCompleteButton); changeButton.setOnClickListener(newButton.OnClickListener(){ publicvoidonClick(Viewv){ changeOption(textView); } }); finalButtonchangeButton2=(Button) findViewById(R.id.textColorButton); changeButton2.setOnClickListener(newButton.OnClickListener(){ publicvoidonClick(Viewv){ changeOption2(textView); } }); |
被这些按钮呼叫的函数将被用于在AutoComplete TextView改变布局属性。这两个我选择来修改的属性(通过两个按钮)是布局的高度和文本的颜色。你将设置一个按钮来改变AutoCompleteTextView的布局高度,从30到100并且返回。另一个按钮将改变View内文本的为红色。
函数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包装中导入。你可以浏览这个包装并且改变这个颜色到任何的数值。我选择红色是因为它比较突出。
完整的autocomplete.java 文件应当看起来像这样:
package android_programmers_guide.AndroidViews; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.ArrayAdapter; importandroid.widget.AutoCompleteTextView; importandroid.widget.Button; importandroid.graphics.Color; publicclassAutoCompleteextendsActivity{ @Override publicvoidonCreate(Bundleicicle){ super.onCreate(icicle); setContentView(R.layout.autocomplete); ArrayAdapter<String>monthArray=newArrayAdapter<String>(this, android.R.layout.simple_list_item_1,Months); finalAutoCompleteTextViewtextView=(AutoCompleteTextView) findViewById(R.id.testAutoComplete); textView.setAdapter(monthArray); finalButtonchangeButton=(Button) findViewById(R.id.autoCompleteButton); changeButton.setOnClickListener(newButton.OnClickListener(){ publicvoidonClick(Viewv){ changeOption(textView); } }); finalButtonchangeButton2=(Button) findViewById(R.id.textColorButton); changeButton2.setOnClickListener(newButton.OnClickListener(){ publicvoidonClick(Viewv){ changeOption2(textView); } }); } staticfinalString[]Months=newString[]{ "January","February","March","April","May","June","July","August", "September","October","November","December" }; publicvoidchangeOption(AutoCompleteTextViewtext){ if(text.getHeight()==100){ text.setHeight(30); } else{ text.setHeight(100); } } publicvoidchangeOption2(AutoCompleteTextViewtext){ text.setTextColor(Color.RED); } } |
增加一个Intent过滤器 在运行这个应用程序之前最后一件事就是在AndroidManifest.xml文件中设置intent过滤器。然后你能从菜单中呼叫intent了。Intent过滤器的代码如下:
<activity android:name=".AutoComplete" android:label="AutoComplete"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> |
这儿是本项目完成的AndroidManifest.xml文件:
<?xml version="1.0" encoding="utf-8"?> <manifestxmlns:android=http://schemas.android.com/apk/res/android package="android_programmers_guide.AndroidViews"> <applicationandroid:icon="@drawable/icon"> <activityandroid:name=".AndroidViews" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activityandroid:name=".AutoComplete"android:label="AutoComplete"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> HandlingtheIntentCall WithAndroidManifest.xmlcomplete,addthefollowingfunctiontoAndroidViews.java: publicvoidshowAutoComplete(){ Intentautocomplete=newIntent(this,AutoComplete.class); startActivity(autocomplete); } |
当从select/case声明中呼叫,这个函数将打开autocomplete活动,编辑select声明的case 0来让它呼叫新的函数:
case 0: showAutoComplete(); return true; |
在Android模拟器中运行这个应用程序。当主活动启动后,点击菜单按钮的AutoComplete菜单项。点击后应当把你带到autocomplete活动。
要测试AutoCompleteTextView,开始输入单词January。在你输入几个字母后,你将会看到January出现在文本框中。下一步,点击Change Layout Button按钮,结果会是一个扩展的文本输入框。现在点击chang Text Color按钮并且输入一些文本。
下一节会给你项目中剩下5个Views的代码支持。