2012-12-20 69 views
17

在我的活動中,我有一個editText字段。當用戶點擊它時,editText獲得焦點並出現鍵盤。現在,當用戶按下電話上的硬件後退按鈕時,鍵盤消失,但光標保持在Edittext,即。即它仍然有重點。按下後退按鈕時是否可以使EditText失去焦點?我試着用下面的代碼,但它不工作:使editText失去對後按的注意力

@Override 
public void onBackPressed() { 
    vibrator.vibrate(Constants.DEFAULT_VIBRATE_TIME); 
    myEditText.clearFocus(); 
      super.onBackPressed(); 
} 
+1

確保myEditText不是第一輸入元件在layout.if是,那麼首先從EditText上移除焦點,然後進行重點任何其他元素一樣的TextView等 –

+0

這是在我的活動第一輸入元件。我想'title.requestFocus()',但它沒有工作,然後 – Ankush

+0

先通標題可聚焦調用title.requestFocus() –

回答

2

你可以再拍你Views可聚焦的,例如ImageView。請務必使其在觸摸模式下可對焦,使用setFocusableInTouchMode(true)onResume()使ViewrequestFocus()。你

也可以創建一個虛擬View與0的尺寸和執行上述相同的步驟。

我希望這會有所幫助。

+4

氣味像一個黑客... –

+0

當鍵盤關閉時,onresume不會被觸發 – PrisonMike

0

添加視圖類似下面的比你的EditText更高:

<LinearLayout 
    android:layout_width="0px" 
    android:layout_height="0px" 
    android:focusable="true" 
    android:focusableInTouchMode="true" /> 

還隱藏鍵盤onBackPressed()補充一點:

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 
11

只是延長的EditText:

public class EditTextV2 extends EditText 
{ 
    public EditTextV2(Context context) 
    { 
     super(context); 
    } 

    public EditTextV2(Context context, AttributeSet attribute_set) 
    { 
     super(context, attribute_set); 
    } 

    public EditTextV2(Context context, AttributeSet attribute_set, int def_style_attribute) 
    { 
     super(context, attribute_set, def_style_attribute); 
    } 

    @Override 
    public boolean onKeyPreIme(int key_code, KeyEvent event) 
    { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) 
      this.clearFocus(); 

     return super.onKeyPreIme(key_code, event); 
    } 
} 

而在xml中只需使用<yourPackage.EditTextV2>而不是<EditText>

注意:根據您支持的min API,您可能需要向此類添加/刪除構造函數。我建議將它們全部加入,並將其中的super()調用以紅色加下劃線。

+0

如果我們要使用構造函數:EditText上下文環境,AttributeSet attrs,int defStyleAttr,int defStyleRes)最低API要求是21 [EditText](https://developer.android.com/reference/android/widget/EditText.html) – ArtiomLK

+1

完美優雅的解決方案。當您需要使用View.OnKeyListener使用片段覆蓋後退按鈕行爲時很有用,並且需要捕獲後退按鈕單擊事件,同時竊取焦點的EditText會中斷您的實現。乾杯! – mwieczorek

相關問題