您的位置:首页 > 移动开发 > Android开发

Android 学习笔记(十四):Activity-AutoCompleteTextView

2012-12-04 00:03 519 查看
AutoCompleteTextView,有一个text作为前缀,有一个类似spinner作为选择,用户也可以敲入所需,可不在spinner的list之中。

AutoCompleteTextView是EditText的subclass,可以使用EditText所有的属性,例如字体,颜色等。此外,提供android:completionThreshold,用于表明最小要敲入多少字符才开始显示list filter。我们可以通过setAdapter设置一个adapter来给出list的内容,但是由于用户可以自行填入内同,因此不支持selected listener,我们可以注册一个TextWatcher,就如同其他EditText widget一样,来检测特系统的变化,它在用户从list中选择或者人工填入都可以监测到。



步骤一:编写:Android XML

下面是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">

<TextView android:id="@+id/selection6"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

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

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:completionThreshold="3" /> <!-- 在我们测试中,缺省为2,即我们敲入第2个字符的时候可以触发list显示 -->

</LinearLayout>

步骤二:J***A source code

//步骤2.1 增加接口,实现TextWatcher

public class Chapter7Test6 extends Activity implements TextWatcher{

private TextView selection;

private AutoCompleteTextView edit;

private String[] items={"lorem", "ipsum", "dolor", "sit", "amet", "consectetuer", "adipiscing", "elit", "morbi", "vel", "ligula", "vitae", "arcu", "aliquet", "mollis", "etiam", "vel", "erat", "placerat", "ante", "porttitor", "sodales", "pellentesque",
"augue", "purus"};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.chapter_7_test6);

selection = (TextView)findViewById(R.id.selection6);

edit = (AutoCompleteTextView)findViewById(R.id .editAuto);



//步骤1:设置适配器

edit.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,items));

//步骤2:设置触发函数,采用TextWatcher,

edit.addTextChangedListener(this);

}



/* 步骤2.2,TextWatcher将需实现afterTextChanged(),beforeTextChanged(),onTextChanged()三个方法。本例无须处理after和before,之针对onTextChanged进行处理 */

public void afterTextChanged(Editable s) {

//nothing to do

}

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

//nothing to do

}

public void onTextChanged(CharSequence s, int start, int before, int count) {

selection.setText(edit.getText());

}

}

来自Android Tutorial的例子:在这个例子中,我们不采用自定义的List格式,通过XML来定义List的格式

1)设置描述List中item的格式

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:textSize="16sp"

android:padding="10dp"

android:textColor="#0000aa">

</TextView>



Android长度单位详解(dp、sp、px、in、pt、mm、dip)

android中定义的dimension单位有以下这些:

px(Pixels ,像素):对应屏幕上的实际像素点。

in(Inches ,英寸):屏幕物理长度单位。

mm(Millimeters ,毫米):屏幕物理长度单位。

pt(Points ,磅):屏幕物理长度单位,1/72英寸。

dp(与密度无关的像素):逻辑长度单位,在 160 dpi 屏幕上,1dp=1px=1/160英寸。随着密度变化,对应的像素数量也变化,但并没有直接的变化比例。

dip:与dp相同,多用于Google示例中。

sp(与密度和字体缩放度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。



2)设置Activity中的XML

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:padding="5dp">

<TextView android:text="Country"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

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

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="5dp"

android:completionThreshold="1" />

</LinearLayout>

3)源代码:这里我们不进行触发,仅显示内容

AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.auto_country);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.chapter_7_test7_item,Chapter7Test2.COUNTRIES);

textView.setAdapter(adapter);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: