安卓编程——自动提示框AutoCompleteTextView的应用
2014-08-23 22:04
441 查看
自动完成文本框AutoCompleteTextView从EditText派生出来,实际上它也是一个文本编辑框,但它比普通的文本编辑框多了一个功能,但用户输入一定字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择,但用户选择某个菜单项之后,AutoCompleteTextView会按用户的选择自动填写该文本框,例如在使用百度输入关键词时候会出现一个下拉菜单方便用户选择。
AutoCompleteTextView需要设置Adapter。
为什么用户输入内容,会出现一个下拉提示菜单呢?因为这些提示内容都是程序一开始就要写入的,也就是由程序员指定提示内容。
先看下边的实例:
当用户输入两个字符“ab”(AutoCompleteTextView默认是两个,可以设置默认字符)时候,自动提示框将会把提示内容“ab"、"abc"、"abcd"显示出来。
先给出layout文件:
利用相对布局,最后的TextView用来显示我们最后按下搜索按键时候的得到关键字。
字符串文件:
下面主要是我们的java代码:
关于Adapter的使用:
adapter=new ArrayAdapter<String>(this,R.layout.item,arr);
第一个参数表示当前Activity,第二个参数R.layout.item为资源ID,代表一个TextView,该TextView组件将作为ArrayAdapter的列表项组件,也就是说,该TextView组件将决定下拉菜单的字体等相关属性,例如字体大小,字体颜色,间距等;第三个参数便是提示内容的数组。R.layout.item需要在layou文件夹下新建一个xml文件,如下:
当时,我把该语句:adapter=new ArrayAdapter<String>(this,R.layout.item,arr);放在了onCreate( )函数外面,导致了程序没有语病等错误,但是在设备上运行出错,网上查找相关资料:Activity中的一个类变量的构造函数需要激活系统服务。而这个类变量的实例化是直接在Activity类里面,而不是在OnCreate函数里面。
解决方法:把Activity中类变量的实例化工作放到Activity的OnCreate函数里面。
问题解决~
AutoCompleteTextView需要设置Adapter。
为什么用户输入内容,会出现一个下拉提示菜单呢?因为这些提示内容都是程序一开始就要写入的,也就是由程序员指定提示内容。
先看下边的实例:
当用户输入两个字符“ab”(AutoCompleteTextView默认是两个,可以设置默认字符)时候,自动提示框将会把提示内容“ab"、"abc"、"abcd"显示出来。
先给出layout文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.testapp.MainActivity" > <Button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="@string/search" /> <AutoCompleteTextView android:id="@+id/etv" android:layout_toLeftOf="@id/bn" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint" /> <TextView android:id="@+id/show" android:layout_below="@id/etv" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout>
利用相对布局,最后的TextView用来显示我们最后按下搜索按键时候的得到关键字。
字符串文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TestApp</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="search">搜索</string> <string name="hint">输入搜索内容</string> </resources>
下面主要是我们的java代码:
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { protected Button bn; protected AutoCompleteTextView etv; //提示内容的字符串数组 String arr[]=new String[]{ "a","ab","abc","abcd" }; protected ArrayAdapter<String> adapter; protected TextView show; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //adapter的使用 adapter=new ArrayAdapter<String>(this,R.layout.item,arr); etv=(AutoCompleteTextView) findViewById(R.id.etv); //AutoCompleteTextView 添加 adapter etv.setAdapter(adapter); //按下“搜索”按钮时显示我们最后搜索的字符串 bn=(Button)findViewById(R.id.bn); show=(TextView)findViewById(R.id.show); bn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View view){ show.setText(etv.getText().toString()); } }); } }
关于Adapter的使用:
adapter=new ArrayAdapter<String>(this,R.layout.item,arr);
第一个参数表示当前Activity,第二个参数R.layout.item为资源ID,代表一个TextView,该TextView组件将作为ArrayAdapter的列表项组件,也就是说,该TextView组件将决定下拉菜单的字体等相关属性,例如字体大小,字体颜色,间距等;第三个参数便是提示内容的数组。R.layout.item需要在layou文件夹下新建一个xml文件,如下:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="12sp" android:padding="10dp" />
当时,我把该语句:adapter=new ArrayAdapter<String>(this,R.layout.item,arr);放在了onCreate( )函数外面,导致了程序没有语病等错误,但是在设备上运行出错,网上查找相关资料:Activity中的一个类变量的构造函数需要激活系统服务。而这个类变量的实例化是直接在Activity类里面,而不是在OnCreate函数里面。
解决方法:把Activity中类变量的实例化工作放到Activity的OnCreate函数里面。
问题解决~
相关文章推荐
- Android基础教程(八)之仿百度谷歌搜索自动提示框-----AutoCompleteTextView的应用
- Android深入浅出系列之实例应用—具有自动提示的菜单应用AutoCompleteTextView和ArrayAdapter的使用
- Android基础教程(八)之仿百度谷歌搜索自动提示框-----AutoCompleteTextView的应用
- Android基础教程(八)之仿百度谷歌搜索自动提示框-----AutoCompleteTextView的应用
- Android深入浅出系列之实例应用—具有自动提示的菜单应用AutoCompleteTextView和ArrayAdapter的使用
- Android入门教程(十二)之仿百度谷歌搜索自动提示框-----AutoCompleteTextView的应用(转)
- Android 应用开发笔记 - 自动提示(AutoComplete-TextView) & ArrayAdapter
- Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用示例
- Android深入浅出系列之实例应用—具有自动提示的菜单应用AutoCompleteTextView和ArrayAdapter的使用
- AutoCompleteTextView自动提示问题
- Android--AutoCompleteTextView,自动提示
- Android:控件AutoCompleteTextView 客户端保存搜索历史自动提示
- Android UI控件详解-AutoComplete-TextView(自动提示)
- Android:控件AutoCompleteTextView 自动提示
- Android UI控件自动提示控件(AutoCompleteTextView)
- 使用AutoCompleteTextView和SharePreference实现搜索历史自动提示功能
- Android浏览器地址栏中历史访问记录的自动提示实现(AutoCompleteTextView)
- 安卓自动完成文本框(autoCompleteTextView)
- Android开发之四(八):常用控件之自动提示(AutoCompleteTextView)