一.常用属性
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布局
<AutoCompleteTextViewJava代码
android:id="@+id/actv_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
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);
}
}
最后效果
上述自动补全是在输入第二个字符时才开始提示,如果需要在输入第一个就提示
可以在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);
最后效果