我正在使用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。结果就是我有多个显示聚焦或按下的框,即使输入只进入一个,也应如此。
无论背景是否曾经改变,都会发生这种情况。
似乎没有任何类型的确定性框或输入以这种方式表现,因此我对发生的事情感到困惑。实际焦点(即出现输入文本的位置)按预期变化。
对可能发生的事情以及如何解决的问题有所了解?