2014-07-09 206 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(); 
      } 
     });