【发布时间】:2017-01-02 07:37:50
【问题描述】:
谁能提供一个解决方案,让软键盘DONE 按钮的监听器正常工作,和/或解释我在当前方法中做错了什么?
我的 XML 和 Java 设置
- 在 Xml 中,有一个简单的 EditText 设置为
android:imeOptions="actionDone" - 在 Java 中,它只有一个基本的
TextView.OnEditorActionListener声明
所以当点击设备软键盘提交(又名DONE)按钮时,setOnEditorActionListener() 不会被调用 - 下面的绿色箭头按钮; 只有 EditText 字段被清除
但是当点击计算机Enter 键(通过 ADB 附加) 时会调用该侦听器。
我认为它应该对这两个按钮都有效.. 这不对吗?
XML 布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.demo.MainActivity">
<EditText
android:id="@+id/comment_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:maxLines="1"
android:imeOptions="actionDone"
/>
</LinearLayout>
Java 活动文件:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((EditText) findViewById(R.id.comment_text)).setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
int i = 5; // added this to set a break point
return false;
}
});
}
}
解决方案更新
感谢@Apoorv Mehrotra 的回答,事实证明我的 EditText 缺少这一属性以便识别软键盘事件。将其添加到上述 Xml 即可解决问题。
android:inputType="text"
【问题讨论】:
-
这解决了我的问题以及我有`android:inputType="textMultiLine"` 但是
text的问题是,在我按下回车后,键盘被隐藏,而textMultiLine在按下后输入消息已发送,但键盘保持焦点 -
感谢您根据上下文发布解决方案。知道为什么需要为关键侦听器声明输入吗?
-
这显然是不合逻辑的,这是一个错误
标签: android