多个TextEdits具有state = focused

时间:2017-12-11 20:21:56

标签: android android-layout android-edittext focus android-background

我正在使用Android应用并遇到TextEdit状态问题。

我在网格中有很多TextEdits,全部使用以下背景选择器之一,具体取决于输入是否正确,不正确或未选中:

中性:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@color/focused_text" />
    <item android:state_pressed="true" android:drawable="@color/pressed_text" />
    <item android:drawable="@color/unfocused_text" />

正确:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/pressed_text" />
    <item android:state_focused="true" android:drawable="@drawable/correct_border_focused" />
    <item android:drawable="@drawable/correct_border" />

不正确:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/pressed_text" />
    <item android:state_focused="true" android:drawable="@drawable/incorrect_border_focused" />
    <item android:drawable="@drawable/incorrect_border" />

这些框由布局定义:

           <EditText
                android:id="@+id/R11"
                style="@style/QuestionNumbers"
                android:layout_width="@dimen/structure_box_width"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:text=" "
                android:background="@drawable/input_background"
                android:gravity="center"
                app:layout_constraintTop_toBottomOf="@+id/NumBox1"
                android:layout_marginLeft="0dp"
                app:layout_constraintLeft_toLeftOf="@+id/NumBox1"
                android:visibility="invisible"
                />

            <EditText
                android:id="@+id/R12"
                style="@style/QuestionNumbers"
                android:layout_width="@dimen/structure_box_width"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:background="@drawable/input_background"
                android:gravity="center"
                app:layout_constraintTop_toBottomOf="@+id/NumBox2"
                android:layout_marginLeft="0dp"
                app:layout_constraintLeft_toLeftOf="@+id/NumBox2"
                android:visibility="invisible"
                />

(还有更多,但除了不同的约束外,它们都有相同的参数)。

它们都在约束布局中,并带有以下参数:

 <android.support.constraint.ConstraintLayout
            android:id="@+id/StructureLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:layout_editor_absoluteX="0dp"
            tools:layout_editor_absoluteY="0dp"
            android:layout_gravity="center_vertical">

我在必要时通过使用以下方式找到R.drawable来改变背景:

Drawable normal_input = getResources().getDrawable(R.drawable.input_background);

然后设置:

 rBoxes[i][j].setBackground(normal_input);

在上下文中,该代码在此处:

checkAnswers = (Button) findViewById(R.id.hardExampleAnswerCheck);
        checkAnswers.setVisibility(View.VISIBLE);
        checkAnswers.setClickable(true);
        checkAnswers.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Boolean any_incorrect = false;
                Boolean finished = true;

                // when Check Answers is pressed, go through the boxes that are enabled to see
                // if the values match the ones in the answers
                // if anything is empty or incorrect, note that
                for (int i = 0; i<rBoxes.length ; i++) {
                    for (int j = 0; j < rBoxes[i].length; j++) {
                        if (rBoxes[i][j] != null) {
                            if (rBoxes[i][j].getVisibility()==View.VISIBLE && rBoxes[i][j].isEnabled()) {
                                    if (rBoxes[i][j].getText().toString().equals(rBoxAnswers[i][j])) {
                                        rBoxes[i][j].setBackground(correct_input);
                                    } else {
                                        rBoxes[i][j].setBackground(incorrect_input);

                                    }

                            }
                        }
                    }
                }

RBoxes [] []的早期初始化位置为:

rBoxes[1][1] = (EditText) findViewById(R.id.R11);           // initialize and find the rBoxes
    rBoxes[1][2] = (EditText) findViewById(R.id.R12);
    rBoxes[2][1] = (EditText) findViewById(R.id.R21);           // rBoxes are the boxes that are
    rBoxes[2][2] = (EditText) findViewById(R.id.R22);           // filled in during the structure
    rBoxes[2][3] = (EditText) findViewById(R.id.R23);
     ///.... <for all of them>

当我按下一个方框时,颜色确实从unfocused_text变为pressed_text,然后(通常但不总是)变为focused_text。当我按下另一个盒子时,它也不会总是变回unfocused_text。结果就是我有多个显示聚焦或按下的框,即使输入只进入一个,也应如此。

无论背景是否曾经改变,都会发生这种情况。

似乎没有任何类型的确定性框或输入以这种方式表现,因此我对发生的事情感到困惑。实际焦点(即出现输入文本的位置)按预期变化。

对可能发生的事情以及如何解决的问题有所了解?

0 个答案:

没有答案