2014-07-09 148 views
1

我创建了一个activity,它应该始终弹出小键盘。所以,我用requestFocus()作为edittext。但我不希望只有键盘消失。相反,当按下返回按钮时,即使当键盘存在时,我也希望整个活动到达finish()。我试过this answer,但没有奏效。我也试过this,虽然看起来有点额外的工作,但这不适用于textwatcher。以下是edittext。我保持它的维度属性为0dp,因为为了避免显示用户甚至是密码字段。任何帮助实现这一点表示赞赏。请让我知道是否需要更多信息。按下后退按钮后完成活动

<EditText 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:id="@+id/passwordet" 
     android:inputType="number" 
     /> 

P.S:重写onBackPressed()不起作用,因为当键盘出现在活动不会被解雇。

回答

0

可以重写onBackPressed方法来完成活动:

@Override 
public void onBackPressed() { 
    finish(); 
} 
+0

我会感到高兴,如果你读了我的问题完全。当键盘出现时,onBackPressed()不会被触发。 – Kanth

+0

我的不好,当我看到你的问题时,并没有清楚地显示出来...... –

0

扩展的EditText并添加下面的方法。

公共类MyEditText延伸的EditText {

OnKeyListener onKeyListener = null; 
public static int BACK_KEY = 10001; 

public void setOnKeyListener(OnKeyListener l) { 
    super.setOnKeyListener(l); 
    onKeyListener = l; 
    Log.i(TAG, "setOnKeyListener Called"); 
} 

public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    Log.i(TAG, "onKeyPreIme"); 
    if (keyCode == KeyEvent.KEYCODE_BACK 
      && event.getAction() == KeyEvent.ACTION_UP) { 
     if (onKeyListener != null) { 
      onKeyListener.onKey(this, BACK_KEY, event); 
     } 
     return false; 
    } 
    return super.dispatchKeyEvent(event); 
} 

}

而且从活动 editText.setOnKeyListener(本); 和onKey方法上的句柄

+0

你能否好好看我的问题?我已经在我的问题中链接了这个答案,但没有成功。 – Kanth

+0

老板,onBackKeyPressed不会被调用,如果键盘是可见的..要获得通知后退键我们需要这样做..首先显示OnKeyPrime方法上的Toast并确认它是否被调用。然后你需要使用自己的回调或任何事情来通知活动..如果你想完整的源代码..张贴你的示例应用程序,我可以做到这一点。 –

0

您需要创建自定义EditText以捕获keyBoardDismissEvent。

你可以尝试这样的事情:

public class CustomEditText extends EditText { 
    private OnKeyboardDismissListener listener; 

    public void setOnKeyBoardDismissListener(OnKeyboardDismissListener listener) { 
     this.listener = listener; 
    } 

    public CustomEditText(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK && listener != null) 
      listener.onKeyBoardDismiss(); 
     return super.onKeyPreIme(keyCode, event); 
    } 

    static interface OnKeyboardDismissListener { 
     void onKeyBoardDismiss(); 
    } 

} 

在布局

<YourPackageName.CustomEditText android:id="@+id/editText" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

内活动:

CustomEditText editText = (CustomEditText) findViewById(R.id.editText); 
     editText.setOnKeyBoardDismissListener(new OnKeyboardDismissListener() { 
      @Override 
      public void onKeyBoardDismiss() { 
       MainActivity.this.finish(); 
      } 
     });