2

私はこれらのように別のEditTextをしなければなりません:

ここに画像の説明を入力してください

  • EditText1にはinputType"textCapWords"があります
  • EditText2にはinputType"number"があります

アクティビティを開始すると、すぐに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とFocusableに設定されています:

<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で[OK]を押した後、EDITTEXT2にフォーカスする方法について何か考えがありますか?

前もって感謝します!

4

2 に答える 2

2

ご回答ありがとうございます。私は最終的に自分の質問に答える最も簡単な方法を見つけました:

追加 :

android:nextFocusRight="@+id/EDITTEXT2"

EDITTEXT1 のプロパティへ。

EDITTEXT1 で「Enter」をクリックした後、EDITTEXT2 に移動するために他に何も必要ありません。

于 2012-09-24T14:01:03.753 に答える
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 は back の値ではなく、キー エンターです。

public static final int KEYCODE_ENTER           = 66;

KeyEvent.KEYCODE_BACKまたはKeyEvent.KEYCODE_ENTER代わりに書いた方がいいでしょう。

これがお役に立てば幸いです。

于 2012-09-21T05:04:26.937 に答える