Android EditText软键盘监听事件以及自动补全功能

时间:2021-08-16 00:31:06

一.常用属性

EditText允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。

EditText继承于TextView,拥有TextView中所有的属性和方法,一般用来提供给用户进行文字,密码等输入操作

常用属性

android:capitalize 设置英文字母大写类型。

android:digits 设置允许输入哪些字符。如“1234567890.+-*/%\n()”

android:editable 设置是否可编辑。仍然可以获取光标,但是无法输入

android:hint Text为空时显示的文字提示信息,可通过textColorHint设置提示信息的颜色

android:inputType 设置文本的类型,用于帮助输入法显示合适的键盘类型。

android:ems 设置TextView的宽度为N个字符的宽度。参见TextView中此属性的截图。

android:maxLength 限制输入字符数。如设置为5,那么仅可以输入5个汉字/数字/英文字母。

android:imeOptions 设置软键盘的Enter键。可用’|’设置多个,有如下值可设置:

            normal 默认,换行

            actionGo, 软键盘下方变成“前往” “去往” “GO” 根据输入法不同而不同

            actionSearch, 软键盘下方变成“搜索”或者放大镜

            actionSend 软键盘下方变成“发送”。

            actionNext, 软键盘下方变成“下一个”

            actionDone 软键盘下方变成“完成”,点击后光标保持在原来的输入框上,并且软键盘关闭

二.软键盘回车键监听事件

和按钮点击事件监听类似,只是eidtText的方法为 setOnEditorActionListener(),

可以使用匿名内部类方式,或者实现OnEditorActionListener接口,重写onEditorAction方法

public class MainActivity extends Activity implements OnEditorActionListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到editText控件
EditText et_input = (EditText) findViewById(R.id.et_input);
//设置软键盘回车键事件监听
et_input.setOnEditorActionListener(this);
}

@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// actionId 当前事件组件的资源ID,用来区分多个EditText用同一个监听器
// event 事件源,封装了当前操作动作
// EditorInfo.IME_ACTION_GO 判断当前回车键 在xml中设置的类型
switch (actionId) {
case EditorInfo.IME_ACTION_GO:
Toast.makeText(MainActivity.this, "IME_ACTION_GO 对应XML中的 actionGo", Toast.LENGTH_SHORT).show();
break;
case EditorInfo.IME_ACTION_SEARCH:
Toast.makeText(MainActivity.this, "IME_ACTION_SEARCH 对应XML中的 actionSearch", Toast.LENGTH_SHORT).show();
break;
case EditorInfo.IME_ACTION_SEND:
Toast.makeText(MainActivity.this, "IME_ACTION_SEND 对应XML中的 actionSend", Toast.LENGTH_SHORT).show();
break;
case EditorInfo.IME_ACTION_NEXT:
Toast.makeText(MainActivity.this, "IME_ACTION_NEXT 对应XML中的 actionNext", Toast.LENGTH_SHORT).show();
break;
case EditorInfo.IME_ACTION_DONE:
Toast.makeText(MainActivity.this, "IME_ACTION_DONE 对应XML中的 actionDown", Toast.LENGTH_SHORT).show();
break;
}
return false;
}
}

三.文字改变监听事件

		et_input.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// 文字改变时 回掉此方法
Toast.makeText(MainActivity.this, "文字改变时 回掉此方法", Toast.LENGTH_SHORT).show();
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// 文字改变之前 回掉此方法
Toast.makeText(MainActivity.this, "文字改变之前 回掉此方法", Toast.LENGTH_SHORT).show();
}

@Override
public void afterTextChanged(Editable s) {
// 文字改变之后 回掉此方法
Toast.makeText(MainActivity.this, "文字改变之后 回掉此方法", Toast.LENGTH_SHORT).show();
}
});

四.EditText自动补全功能

AutoCompleteTextView extends EditText 使用AutoCompleteTextView可以实现输入文本自动提示自动补全

XML布局

    <AutoCompleteTextView
android:id="@+id/actv_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Java代码

public class MainActivity extends Activity {

// 1.定义数据源
String[] names = new String[] { "zhangsan", "lisi", "wangwu", "zhaoliu" };
ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 2.找到editText控件
AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.actv_input);
// 3.创建适配器 此处使用简单方便arrayAdapter 每一行显示一行文字
/** new ArrayAdapter<String>(
* this 上下文
* R.layout.item_actv_layout 布局
* R.id.tv 该布局上的TextView的id号
* names 最后一个是数据
* );
*/
adapter = new ArrayAdapter<String>(this,
//这是系统自己定义的一个布局就是一个 textview
android.R.layout.simple_list_item_1,
//此处没写R.id.tv是因为系统的布局会自己去找,而自定义的布局则需要加上控件id
names);
// 4.设置适配器
actv.setAdapter(adapter);
}
}

最后效果

Android EditText软键盘监听事件以及自动补全功能

上述自动补全是在输入第二个字符时才开始提示,如果需要在输入第一个就提示

可以在XML中添加android:completionThreshold="1"或者在Java代码中加上

actv.setThreshold(1); //此处actv是指我定义的 AutoCompleteTextView对象名

如果想要实现发送短信时的自动提示,即可以使用逗号分隔输入类容并继续提示,则可以使用 MultiAutoCompleteTextView

XML代码

    <MultiAutoCompleteTextView
android:id="@+id/mactv"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

Java代码与使用AutoCompleteTextView类似,区别是需要设置分隔符,一般以 ‘,’号分割

		//找到 MultiAutoCompleteTextView 控件
MultiAutoCompleteTextView mactv = (MultiAutoCompleteTextView) findViewById(R.id.mactv);
//使用,来分割。
mactv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
//设置适配器之前,必须要知道分隔符是什么样的。
mactv.setAdapter(adapter);

最后效果

Android EditText软键盘监听事件以及自动补全功能

Android EditText软键盘监听事件以及自动补全功能