最近在用AS做登录界面使用EditText的时候,发现了一个监听事件setOnEditorActionListener;因为通过布局文件中的imeOptions可以控制软件盘右下角的按钮显示为不同按钮。所以和EditorInfo搭配起来可以实现各种软键盘的功能。
各种属性对应:
- imeOptions=”actionUnspecified” –> EditorInfo.IME_ACTION_UNSPECIFIED
- imeOptions=”actionNone” –> EditorInfo.IME_ACTION_NONE
- imeOptions=”actionGo” –> EditorInfo.IME_ACTION_GO
- imeOptions=”actionSearch” –> EditorInfo.IME_ACTION_SEARCH
- imeOptions=”actionSend” –> EditorInfo.IME_ACTION_SEND
- imeOptions=”actionNext” –> EditorInfo.IME_ACTION_NEXT
- imeOptions=”actionDone” –> EditorInfo.IME_ACTION_DONE
用法
- 布局中定义一个EditText控件
- 定义一个可编辑的editText控件
<EditText android:id="@+id/name_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:background="@null" android:hint="请输入账户" android:textSize="14sp" android:ems="10" android:inputType="number" android:imeOptions="actionDone" /> <!-- 这里和onEditorAction中actionId对应-->
- 添加setOnEditorActionListener方法
//定义监听事件 nameEdit.setOnEditorActionListener(this);
/* * EditText是TextView子类 * 方法:onEditorAction() * 第一个参数:TextView textView 表示当前触发事件的EditText的对象,类似于textView=findViewById(R.id.name_edit) * 第二个参数:int actionId 表示 按下“完成按钮”,这里和xml文件中EditText属性imeOptions对应 * 但要注意actionId是指软盘上的,而键盘上的actionId与软盘上的不一样;即在软盘上“完成按钮”的actionId为0,而键盘上的“完成按钮(回车键)”的actionId为6 * 第三个参数:KeyEvent keyEvent 表示 按下“完成按钮”,这里和xml文件中EditText属性imeOptions对应,但keyEvent里面的内容更丰富,内容如下: * keyEvent.toString()=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_ENTER, scanCode=28, metaState=0, flags=0x8, repeatCount=0, eventTime=5664212, downTime=5664212, deviceId=1, source=0x301 } * 返回值:返回true,保留软键盘;false,隐藏软键盘 */ @Override public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { Toast.makeText(login_activitys.this, textView.getText().toString(), Toast.LENGTH_LONG).show(); Log.i(LOG_TEST,actionId+"|"+EditorInfo.IME_ACTION_DONE); if (actionId == EditorInfo.IME_ACTION_DONE) { // 按下完成按钮,这里和xml文件中的EditText中属性imeOptions对应; Toast.makeText