您的位置:首页 > 编程语言

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

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

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函数里面。

问题解决~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐