我有一个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),但它也没有工作。
提前致谢。
答案 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
,它也会在触摸模式下禁用视图的焦点事件。