【问题标题】:detect keystrokes in edittext检测edittext中的击键
【发布时间】:2013-08-17 10:18:03
【问题描述】:

我有一个编辑文本和一个按钮。我希望在编辑文本中按下键盘上的输入/回车时调用按钮 onclick 处理程序。

xml 布局:

   <EditText android:id="@+id/input"
    android:layout_weight="1"
    android:layout_width="0dp"
    android:maxLength="1"        
    android:layout_height="wrap_content"
    android:hint="@string/enter" />

    <Button 
    style="?android:attr/buttonStyleSmall"         
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send" 
    android:onClick="handler"/>        

处理程序如下所示:

public void handler(View view){
//handles buttonclick here    
    }

我已阅读有关堆栈溢出的其他答案,但没有一个解决方案对我有用,因为可能我做错了什么。有人可以用代码告诉我在edittext中按下ENTER键时如何调用处理程序吗?

我运行代码的设备是带有 Honeycomb 的 Acer Iconia A501Tablet。

这是完整的java文件 http://pastebin.com/tbTTu7T7

【问题讨论】:

    标签: android android-edittext


    【解决方案1】:
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
            case KeyEvent.KEYCODE_ENTER:
                /// call click event here by passing view
                //or u can write code which u want to be called onclick
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }
    

    【讨论】:

    • 这与 kettu 的答案完全相同,但它不起作用。输入没有被检测到。我不知道这是否相关,但我运行代码的设备是带有 Honeycomb 的 Acer Iconia A501Tablet
    【解决方案2】:

    试试这个..

      @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_ENTER:
           button.performClick();
            return true;
        }
      }
      return super.onKeyDown(keyCode, event);
    }
    

    【讨论】:

    • 这不起作用..按回车没有反应。另请注意,edittext 设置为 android:maxLength="1".. 这可能是未检测到 enter 键的原因吗?
    • maxLength 不会引起问题。没有它也无法工作。
    • 尝试在 xml 中使用 android:imeOptions=""。更多详情developer.android.com/guide/topics/text/…
    【解决方案3】:

    成功了

      @Override
      public boolean onKeyUp(int keyCode, KeyEvent event) {
    
          switch (keyCode) {
          case KeyEvent.KEYCODE_ENTER:
              button.performClick();
              return true;
          default:
              return super.onKeyUp(keyCode, event);
          }
    
    
      }
    

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      相关资源
      最近更新 更多