setOnEditorActionListener不使用软键盘提交按钮,但使用笔记本电脑输入密钥?

时间:2017-01-02 07:37:50

标签: android

有人可以提供一个解决方案,让软键盘DONE按钮的工作听众,和/或解释我目前的做法中我做错了什么?

我的Xml& Java安装程序

  • 在Xml中,有一个简单的EditText设置为android:imeOptions="actionDone"
  • 在Java中,它只有一个基本的TextView.OnEditorActionListener声明

当设备软键盘提交(又名setOnEditorActionListener())按钮 - 下方的绿色箭头按钮点击时,DONE没有被调用; 仅清除EditText字段

enter image description here

但点击计算机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"

5 个答案:

答案 0 :(得分:2)

尝试此代码这是一个包含2个字段的代码,其中我有用户时间功能。在第一个键盘显示下一个按钮,在第二个软键盘显示完成选项和完成选项我隐藏软键盘。

下面的

是xml文件代码。

  <EditText
                android:id="@+id/txt1"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:gravity="top|left"
                android:imeOptions="actionNext"
                android:inputType="text|textNoSuggestions"
                android:text=""
                android:visibility="visible" />

    <EditText
                android:id="@+id/txt2"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:gravity="top|left"
                android:imeOptions="actionDone"
                android:inputType="text|textNoSuggestions"
                android:text=""
                android:visibility="visible"
                />

现在下面是java代码:用于隐藏下一个软键盘,同样可以执行完成选项。

此代码添加了您班级的onCreate()。

    EditText first_txt = (EditText) findViewById(R.id.txt1);
    EditText second_txt = (EditText) findViewById(R.id.txt2);

    first_txt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_NEXT) {

                InputMethodManager imm = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

                return true; // Focus will do whatever you put in the logic.
            }
            return false;  // Focus will change according to the actionId
        }
    });

second_txt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {

                InputMethodManager imm = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

                return true; // Focus will do whatever you put in the logic.
            }
            return false;  // Focus will change according to the actionId
        }
    });

此代码适用,希望它可以帮助您!

答案 1 :(得分:0)

这是一个似乎尚未解决的老问题。这些案例有一个解决方法。只需使用EditText(或您可能需要的任何视图,并为其分配onEditorActionListener,如下所示:

final EditText editor = (EditText) findViewById(R.id.myEditText);
editor.setOnEditorActionListener(EnterOnText);

现在定义EnterOnText实现,如下所示:

TextView.OnEditorActionListener EnterOnText = new TextView.OnEditorActionListener() {
  public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_GO) {
      final String msg = view.getText().toString();
      if (!msg.isEmpty()) {
        // Do whatever you need here
        ...
      }
    }
    return true;
  }
};

现在,只需将布局的imeOptions属性更改为:

android:imeOptions="actionGo"

相反,这可能会使您的模拟器的输入密钥不起作用,但会(应该)在所有物理设备上执行。

答案 2 :(得分:0)

((EditText) findViewById(R.id.comment_text)).setOnEditorActionListener(new OnEditorActionListener() {        
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if(actionId==EditorInfo.IME_ACTION_DONE){
            //do something
        }
    return false;
    }
});

答案 3 :(得分:0)

试试这个,

    ((EditText) findViewById(R.id.comment_text)).setOnEditorActionListener(new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

    if (event != null && (actionId == EditorInfo.IME_ACTION_GO
                            || event.getKeyCode() == event.KEYCODE_ENTER))
    {
    //do whatever you want
    }

                }
            });



<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="actionGo"
    /> 

答案 4 :(得分:0)

我遇到了同样的问题,对我来说,在EditText中添加android:singleLine="true"可以解决问题