禁用和重新启用时,无法单击EditText

时间:2014-09-05 14:08:26

标签: java android xml

我有一个CheckBox,可以启用/禁用一些EditText视图。首先,当活动开始时,我可以点击EditText,但是当我按下CheckBox(设置启用为false)然后再次按下复选框(据说将EditText设置为启用)时,我无法点击EditText。

这是java代码

    @Override
public void onCheckedChanged(CompoundButton buttonView,
        boolean isChecked) {
    final EditText etPersonTitle = (EditText)v.findViewById(R.id.et_person_title);
    final EditText etFirstname = (EditText)v.findViewById(R.id.et_first_name);
    final EditText etSurname = (EditText)v.findViewById(R.id.et_surname);

    if(isChecked){
        etPersonTitle.setText(R.string.unknown);
        etFirstname.setText(R.string.unknown);
        etSurname.setText(R.string.unknown);
    }

    else {
        etPersonTitle.setText("");
        etFirstname.setText("");
        etSurname.setText("");
    }

    etPersonTitle.setEnabled(!isChecked);
    etPersonTitle.setFocusable(!isChecked);
    etFirstname.setEnabled(!isChecked);
    etFirstname.setFocusable(!isChecked);
    etSurname.setEnabled(!isChecked);
    etSurname.setFocusable(!isChecked);
}

,这是xml:

<TableRow
                android:id="@+id/tableRow1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="right"
                    android:text="@string/title" />

                <EditText
                    android:id="@+id/et_person_title"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:ems="15"
                    android:inputType="textPersonName"
                    android:textAppearance="?android:attr/textAppearanceSmall" >
                </EditText>
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="right"
                    android:text="@string/first_name" />

                <EditText
                    android:id="@+id/et_first_name"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:ems="15"
                    android:inputType="textPersonName"
                    android:textAppearance="?android:attr/textAppearanceSmall" >
                </EditText>
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="right"
                    android:text="@string/surname" />

                <EditText
                    android:id="@+id/et_surname"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:ems="15"
                    android:inputType="textPersonName"
                    android:textAppearance="?android:attr/textAppearanceSmall" >
                </EditText>
            </TableRow>

            <LinearLayout
                android:id="@+id/ll_unknown_customer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="10dp"
                    android:text="@string/unknown_customer" />

                <CheckBox
                    android:id="@+id/cb_unknown_customer"
                    style="@style/checkbox_style"
                    android:background="@drawable/checkbox_background"
                    android:button="@null"
                    android:checked="false" />

            </LinearLayout>

需要注意的一点是,TableLayout位于ScrollView中。我不确定这是什么造成了这个问题,但这是我的第一个怀疑。

我尝试了setClickable(true),但它也没有工作。

提前致谢。

2 个答案:

答案 0 :(得分:1)

这样做。

if (isChecked) {
                etPersonTitle.setText("asd");
                etFirstname.setText("asd");
                etSurname.setText("asd");
                etPersonTitle.setEnabled(!isChecked);
                etPersonTitle.setFocusable(!isChecked);
                etFirstname.setEnabled(!isChecked);
                etFirstname.setFocusable(!isChecked);
                etSurname.setEnabled(!isChecked);
                etSurname.setFocusable(!isChecked);
            }

            else {
                etPersonTitle.setText("");
                etFirstname.setText("");
                etSurname.setText("");

                etPersonTitle.setEnabled(true);
                etPersonTitle.setFocusableInTouchMode(true);

                etFirstname.setEnabled(true);
                etFirstname.setFocusableInTouchMode(true);

                etSurname.setEnabled(true);
                etSurname.setFocusableInTouchMode(true);

            }

答案 1 :(得分:0)

setFocusable 主要用于在触摸模式和键盘模式(使用向上/向下/下一个键)下启用/禁用视图的焦点事件。

setFocusableInTouchMode 主要用于单独在触摸模式下启用/禁用视图的焦点事件。

如果您被禁用 setFocusable,它也会在触摸模式下禁用视图的焦点事件。