在安卓中将焦点从EditText中移除

4

我在布局中有两个 EditText 和一个 CheckBox,以及一个 Button,排列顺序如上所述。用户输入完 EditText 中的值后,必须通过单击 CheckBox 来接受条款和条件。我需要在单击复选框后从 EditText 中移除焦点。目前焦点始终在第二个 EditText 上。如何实现这一点?请帮忙。 布局:

  <EditText
      android:id="@+id/pm_et_customer_id"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:ems="10"
      android:hint="@string/customer_id_hint"
      android:fontFamily="sans-serif-light"
      android:gravity="center"
      android:singleLine="true"
      android:layout_centerHorizontal="true"
      android:inputType="phone"
      android:textAppearance="?android:attr/textAppearanceMedium"/>

  <RelativeLayout
      android:id="@+id/pm_rl_mob_no_widget"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:padding="6dp"
      android:layout_below="@id/pm_et_customer_id"
      android:gravity="center_horizontal">

    <EditText
        android:id="@+id/pm_et_dial_code"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/pm_et_msisdn"
        android:layout_marginLeft="5dp"
        android:ems="3"
        android:fontFamily="sans-serif-thin"
        android:gravity="center"
        android:text="@string/plus_nine_one"
        android:textAppearance="?android:attr/textAppearanceMedium"
    />

    <EditText
        android:id="@+id/pm_et_msisdn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/pm_et_dial_code"
        android:ems="9"
        android:fontFamily="sans-serif-light"
        android:gravity="center_horizontal"
        android:hint="@string/msisdn_hint"
        android:inputType="phone"
        android:maxLength="14"/>
  </RelativeLayout>

  <Button
      android:id="@+id/pm_bt_proceed"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_below="@+id/lay_t_c"
      android:layout_centerHorizontal="true"
      android:layout_marginLeft="20dp"
      android:layout_marginRight="20dp"
      android:layout_marginTop="8dp"
      android:fontFamily="sans-serif-light"
      android:text="@string/bt_label_proceed"/>

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@+id/pm_rl_mob_no_widget"
      android:id="@+id/lay_t_c"
      android:layout_marginTop="10dp"
      android:gravity="center"
      android:orientation="horizontal">
    <CheckBox
        android:id="@+id/pm_check_t_and_c"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-thin"
        android:textSize="14sp"
        android:text="@string/pm_label_accept"/>

    <TextView
        android:id="@+id/pm_tv_t_and_c"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="4dp"
        android:layout_marginEnd="4dp"
        android:paddingLeft="4dp"
        android:paddingStart="4dp"
        android:fontFamily="sans-serif-light"
        android:text="@string/pm_label_t_and_c"
        android:textSize="14sp"/>
  </LinearLayout>

</RelativeLayout>

只需在“复选框”单击时清除您的注意力。 - Jay Rathod
@有胡须的野兽,在布局中,你的视图顺序是什么? - Dhiraj
1
@beardedbeast 给你的 EditText2.clearFocus() - Jay Rathod
@Dhiraj EditText1->EditText2->CheckBox->Button@Dhiraj EditText1->EditText2->CheckBox->Button - Nabeel K
1
@beardedbeast 发布你的 XML 代码。 - Jay Rathod
显示剩余3条评论
4个回答

2
使用Check BoxonCheckedChangeListener,您可以轻松实现此功能。只需在您的Activity's onCreate()中应用即可。
chb1 = (CheckBox) findViewById(R.id.pm_check_t_and_c);
        chb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (chb1.isChecked()) {
                    edt1.clearFocus();
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(edt1.getWindowToken(), 0);
                } else {
                    edt1.requestFocus();
                }

            }
        });

它是否正常工作? - Jay Rathod

1
checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editText.setFocusable(false);
        }
    });

将上面的OnClickListener添加到复选框中。

1
如果我这样做,就无法再次编辑EditText。 - Nabeel K
5
android:focusableInTouchMode="true" 添加到最外层布局,并在复选框的 OnClickListener 中调用 editText.clearFocus();。这对我有效。 - Chathuranga Shan Jayarathna

1
checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editText.setFocusable(false);
        }
    });

移除焦点后,请再执行一次。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);


-3
editText.setEnabled(false);

在复选框监听器中使用它,这对我很有效


如果我这样做,就不能再次编辑它了。 - Nabeel K
在编辑之前,请将此行代码添加:editText.setEnabled(false); - Haroon
它只是禁用了EditText,你无法编辑。 - Jaycee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接