2012-09-20 46 views
2

我有不同的EditText這樣的:請求焦點從一個EditText到另一個不同的inputType

enter image description here

  • EditText1擁有的inputType 「textCapWords」
  • EditText2擁有的inputType 「數字」

當我啓動我的活動時,我立即請求關注EditText1。這樣做是工作的唯一方法是添加這個對的onCreate:

getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
EDITTEXT1.requestFocus(); 

當用戶點擊他的軟鍵盤「返回」,我想EDITTEXT2獲得焦點。所以我補充說:

EDITTEXT1.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (keyCode == 66) { // CODE FOR RETURN 
      EDITTEXT2.requestFocus(); 
     } 
     return false; 
    } 
}); 

但是,當我這樣做,沒有任何反應。我所有的EditText設置FocusableInTouchMode和可聚焦:

<EditText 
    android:id="@+id/EDITTEXT1" 
    android:layout_width="0dip" 
    android:layout_height="20dip" 
    android:layout_weight="2" 
    android:background="@color/White" 
    android:ems="10" 
    android:hint="My First EditText" 
    android:inputType="textCapWords" 
    android:padding="2dip" 
    android:singleLine="true" 
    android:textColor="@color/Black" 
    android:textSize="12dip" > 
    <requestFocus /> 
</EditText> 

<EditText 
    android:id="@+id/EDITTEXT2" 
    android:layout_width="0dip" 
    android:layout_height="20dip" 
    android:layout_weight="2" 
    android:background="@color/White" 
    android:ems="10" 
    android:hint="My Second EditText" 
    android:inputType="textCapWords" 
    android:padding="2dip" 
    android:singleLine="true" 
    android:textColor="@color/Black" 
    android:textSize="12dip" > 
</EditText> 

你對我怎麼能按確定的EDITTEXT1後集中EDITTEXT2任何想法?

在此先感謝!

回答

2

非常感謝您的回答。我終於找到了回答我的問題,最簡單的方法:

地址:

機器人:nextFocusRight = 「@ + ID/EDITTEXT2」

要EDITTEXT1的屬性。

爲了在EDITTEXT1上點擊「Enter」後進入EDITTEXT2,不需要別的東西。

0

你應該創建自己的EditText從EditText上擴展首先,然後覆蓋評判dispatchKeyEventPreIme這樣的:

@Override 
public boolean dispatchKeyEventPreIme(KeyEvent event) { 
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
     if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { 
      return super.dispatchKeyEventPreIme(event); 
     } else if (event.getAction() == KeyEvent.ACTION_UP) { 
      hideInputMethod(); 
      //change your focus at here 
      return true; 
     } 
    } 
    return super.dispatchKeyEventPreIme(event); 
} 

protected void hideInputMethod() { 
    InputMethodManager imm = (InputMethodManager)getContext() 
     .getSystemService(Context.INPUT_METHOD_SERVICE); 
    if (null != imm) { 
     imm.hideSoftInputFromWindow(getWindowToken(), 0); 
    } 
} 

順便說一句,這不是一個好辦法來編寫這樣的if (keyCode == 66) { // CODE FOR RETURN,也是66不是後面的價值,這是關鍵輸入。

public static final int KEYCODE_ENTER   = 66; 

你最好是寫KeyEvent.KEYCODE_BACKKeyEvent.KEYCODE_ENTER代替。

我希望這可以幫助你。

相關問題