2013-08-23 94 views
2

我有一個LinearLayout與幾個EditText's,所有這些都是以編程方式創建的(不帶有XML佈局),特別是沒有ID。跳過軟鍵盤上的Next IME按鈕時禁用EditText's

當我在EditText的之一正在輸入,和下一個(相應的聚焦)被禁用,以及本人按下鍵盤上的下一步IME按鈕,聚焦前進到禁用EditText,但我無法輸入任何內容。

我期待的是重點推進到下一個啓用EditText。除了通過edittext.setEnabled(false)禁用EditText之外,我還嘗試通過edittext.setFocusable(false)edittext.setFocusableInTouchMode(false)禁用其可聚焦性,並設置TYPE_NULL輸入類型,但無濟於事。

任何提示?

感謝)

+0

可能的重複[移到另一個EditText當軟鍵盤下一個在Android上點擊](https://stackoverflow.com/questions/17989733/move-to-another-edittext-when-soft-keyboard-next-is在Android上點擊) –

回答

10

解決通過檢查如何下一個可選擇的由鍵盤從this blog post發現,通過繼承EditText

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.EditText; 

public class MyEditText extends EditText { 

    public MyEditText(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public MyEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

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

    @Override 
    public View focusSearch(int direction) { 
     View v = super.focusSearch(direction); 
     if (v != null) { 
      if (v.isEnabled()) { 
       return v; 
      } else { 
       // keep searching 
       return v.focusSearch(direction); 
      } 
     } 
     return v; 
    } 

} 

更多細節:

ViewGroup實施focusSearch()使用FocusFinder,這將調用addFocusables()ViewGroup的可見性實現測試,而View實現測試可聚焦性。既不測試啓用狀態,這就是爲什麼我將此測試添加到上面的MyEditText

0

參見

EditText editText = (EditText) findViewById(R.id.search); 
editText.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     boolean handled = false; 
     if (actionId == EditorInfo.IME_ACTION_SEND) { 
      sendMessage(); 
      handled = true; 
     } 
     return handled; 
    } 
}); 

這是從http://developer.android.com/training/keyboard-input/style.html#Action抓起。

如果你能弄清楚如何把重點放在未來TextView,你可以添加一個OnEditorActionListenerTextView並將其焦點傳遞給下一個,如果它被禁用。

+0

找到下一個EditText就在這裏。由於我的活動中的EditText是動態的(它們的編號和狀態是在運行時決定的),所以我不想保留EditText的列表。鍵盤如何找到下一個EditText?也許看着它的源代碼可能會有幫助... – Venator85