EditText焦点问题

时间:2016-05-05 10:40:04

标签: android android-layout android-edittext

我遇到了几个并存的EditText组件的问题(它们是RelativeLayout的子组件)。

                <EditText
                android:id="@+id/num1"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:maxLength="1"                    
                android:inputType="number"
                android:textColor="@color/textColor"
                android:gravity="center"
                android:focusableInTouchMode="true"
                android:focusable="true"
                />
            <EditText
                android:id="@+id/num2"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:maxLength="1"
                android:layout_toEndOf="@id/num1"
                android:layout_marginStart="10dp"                    
                android:inputType="number"
                android:textColor="@color/textColor"
                android:gravity="center"
                android:focusableInTouchMode="true"
                android:focusable="true"
                />
            <EditText
                android:id="@+id/num3"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:maxLength="1"
                android:layout_toEndOf="@id/num2"
                android:layout_marginStart="10dp"                    
                android:inputType="number"
                android:textColor="@color/textColor"
                android:gravity="center"
                android:focusableInTouchMode="true"
                android:focusable="true"
                />

此外,以下是尝试将焦点从num1组件更改为num2组件的相关代码,但实际上会发生的情况是焦点从num1变为num3:

        final EditText etLastNumber1 = (EditText) findViewById(R.id.num1);
    final EditText etLastNumber2 = (EditText) findViewById(R.id.num2);
        etLastNumber1.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (Misc.IsKeyCodeNumber(keyCode)) {
                etLastNumber1.clearFocus();
                etLastNumber2.requestFocus();
                return false;
            }
            return true;
        }
    });

我尝试了相同代码的不同变体,包括不使用clearFocus和/或始终返回true。此外,父布局使用descendantFocusability = beforeDescendants和focusableInTouchMode = true。

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

尝试其中一个:

android:nextFocusDown="@+id/.."  
android:nextFocusLeft="@+id/.."    
android:nextFocusRight="@+id/.."    
android:nextFocusUp="@+id/.."

示例:

<EditText
                android:id="@+id/num1"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:maxLength="1"                    
                android:inputType="number"
                android:textColor="@color/textColor"
                android:gravity="center"
                android:focusableInTouchMode="true"
                android:focusable="true"
                android:nextFocusDown="@+id/num2"
                />

答案 1 :(得分:0)

好的,经过几周的Android应用程序开发其他方面后,我已经回到了这个问题,我找到了解决这个问题的方法。

问题主要是在输入和聚焦组件期间可能发生的关键事件的上下文。

那就是说,我已经在OnKeyListener方法中添加了突出显示的条件:

                if (event.getAction() != KeyEvent.KEYCODE_SOFT_LEFT && event.getAction() != KeyEvent.KEYCODE_SOFT_RIGHT && Misc.IsKeyCodeNumber(keyCode)) {

            }