17

プロパティを持つ2 つの EditText を作成し"android:inputType="number"ました。

ここではハードウェア キーボードを使用しているため、textField でスペース キー イベントを実行すると、フォーカス コントロールが editText ビューから画面の他のランダム ビューに直接シフトします。通常のテキスト フィールド タイプでは、別の文字として扱われますが、それで問題ありません。

スペースキーイベントを使用して同じフィールドにフォーカスを保持する方法を知っている人は誰でもいます。

4

3 に答える 3

3

editText.setInputType(InputType.TYPE_CLASS_NUMBER) を使用すると、問題が解決する可能性があります。

于 2015-12-22T11:14:40.447 に答える
2

android:imeOptions="actionNext"次のように EditText プロパティを変更/追加します

<EditText
    android:id="@+id/edit_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:imeOptions="actionNext"
    android:inputType="text" /> 

またはandroid:imeOptions="actionNone"、EditText のデフォルトの動作について

<EditText
    android:id="@+id/edit_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:imeOptions="actionNone"
    android:inputType="text" />
于 2015-12-23T09:10:04.980 に答える
2

したがって、問題は EditText の「入力」タイプに関係する必要はなく、キーボードからのキー押下イベントに関係しているように見えます....

したがって、「うまくいけば」これで問題が解決するはずです(「スペース」ボタンが押されてから「次の」イベントを「スキップ」することにより)。

 // do for both EditText(s)
 editText1.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        log.d("main","KeyPress:"+ actionID);
        if (event != null ) { log.d("main","KeyPress:" + event.getKeyCode() ); }
            if ( actionId == EditorInfo.IME_ACTION_NEXT) {
                // do 'nothing' or 'add a space' if you want that
                return true;
            }
            return false;
        }
    });

これはおそらく起こっていることです (XML なしではわかりにくい)

だから私はあなたがパターンを理解するのに役立つ何かを見つけました+おそらくそれを解決することにつながります... https://stackoverflow.com/a/17990096から

XML (または同等のコード) に設定がある場合、android:nextFocus....および/または物理キーボードの「スペース」もIME_ACTION_NEXT (またはそれに類似した別の IME アクション) を通知している場合


問題の原因が IME アクションでない場合は、EditorInfo.IME_ACTION_NEXTこれを試すことができます...何が原因かを判断します。

から: https://stackoverflow.com/a/4171427

PHYSICALキーボードがある場合は、keyDown イベントを検出して適切に処理するために使用できます。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {
    log.d("main","KeyPress:" + keyCode);
    if (event != null ) { log.d("main","KeyPress:" + event.getKeyCode() ); }
   // if you want to 'handle' the keyPess here, best to use switch like below
   // switch (keyCode) {
   //     case KeyEvent.KEYCODE_A:
    //    {
    //        //your Action code
    //        return true;
    //    }
   /// }
    return super.onKeyDown(keyCode, event);
}

しかし...ソフトウェアキーボードを使用している場合は、addTextChangedListener/TextWatcherを使用する必要があります物理的なキーの押下はEditTextによって「食べられる」ためです(別の投稿で見たものからですが、私のテストでは正しいようです.)

mMyEditText.addTextChangedListener(new TextWatcher()
{
    public void afterTextChanged(Editable s) 
    {
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    {
        /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
    }
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    {
    }
);

「スペース」が入力されたときの EditText の動作をオーバーライドできます。

これは「ソフトウェア キーボード」の場合はかなり簡単に思えますが、物理キーボードは少し難しいようです。

https://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html

この質問に似ています (ただし、「入力」ではなく「スペース」) Android - EditText で「入力」を処理します


これは、変更されるフォーカスの「パターン」を判断するのに役立ちます。ランダムかどうか (ほとんどの場合 - ランダムではありませんが、調べると「興味深い」可能性があります)

http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html

// try this to see
View.OnFocusChangeListener changeListener = new View.OnFocusChangeListener()                
    {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            log.d("YourClassName", "FocusChanged" + hasFocus)
        }
    };

 EditText1.setOnFocusChangeListener(changeListener);
 EditText2.setOnFocusChangeListener(changeListener);
 Button.setOnFocusChangeListener(changeListener);
 // ... etc... (add to views to see if there is pattern)
于 2015-12-24T00:28:30.057 に答える