安卓编程——自动提示框AutoCompleteTextView的应用

自动完成文本框AutoCompleteTextView从EditText派生出来,实际上它也是一个文本编辑框,但它比普通的文本编辑框多了一个功能,但用户输入一定字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择,但用户选择某个菜单项之后,AutoCompleteTextView会按用户的选择自动填写该文本框,例如在使用百度输入关键词时候会出现一个下拉菜单方便用户选择。


AutoCompleteTextView需要设置Adapter。

为什么用户输入内容,会出现一个下拉提示菜单呢?因为这些提示内容都是程序一开始就要写入的,也就是由程序员指定提示内容。

先看下边的实例:

安卓编程——自动提示框AutoCompleteTextView的应用_第1张图片


当用户输入两个字符“ab”(AutoCompleteTextView默认是两个,可以设置默认字符)时候,自动提示框将会把提示内容“ab"、"abc"、"abcd"显示出来。

先给出layout文件:



    

利用相对布局,最后的TextView用来显示我们最后按下搜索按键时候的得到关键字。

字符串文件:




    TestApp
    Hello world!
    Settings
    搜索
    输入搜索内容


下面主要是我们的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 adapter;
	protected TextView show;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //adapter的使用
        adapter=new ArrayAdapter(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(this,R.layout.item,arr);

第一个参数表示当前Activity,第二个参数R.layout.item为资源ID,代表一个TextView,该TextView组件将作为ArrayAdapter的列表项组件,也就是说,该TextView组件将决定下拉菜单的字体等相关属性,例如字体大小,字体颜色,间距等;第三个参数便是提示内容的数组。R.layout.item需要在layou文件夹下新建一个xml文件,如下:




当时,我把该语句:adapter=new ArrayAdapter(this,R.layout.item,arr);放在了onCreate( )函数外面,导致了程序没有语病等错误,但是在设备上运行出错,网上查找相关资料:Activity中的一个类变量的构造函数需要激活系统服务。而这个类变量的实例化是直接在Activity类里面,而不是在OnCreate函数里面。

解决方法:把Activity中类变量的实例化工作放到Activity的OnCreate函数里面。

问题解决~


你可能感兴趣的:(Android)