如何在创建活动时使编辑文本不聚焦

2022-08-31 14:25:06

我已经阅读了讨论这个问题的其他问题,除了创建的第一个问题之外,它们都适用于我的布局。

目前,这是我的方法的顶部:onCreate

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

^ 这使得它至少键盘不会在启动时弹出,但仍然专注于。EditText

这是我的:XMLEditText

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30" >
</EditText>

当我提起我的活动时,它就是这个样子:

enter image description here

问题是,对于某些手机,当像这样专注时,他们无法在其中写入。我希望它不要聚焦。EditText

我所做的工作适用于下一个布局,因为它没有重点,看起来更像这样:EditTexts

enter image description here

请注意,它的布局是相同的。这是用户被带回此屏幕后的屏幕,这将表明没有问题,因为这是相同的,但问题是 仅在创建活动时关注。XMLXMLEditText

我已经做了研究,所有其他问题都无法帮助我(但是它们确实帮助键盘没有出现,谢天谢地)。我怎样才能使启动时看起来像第二个屏幕截图,而不是第一个屏幕截图?EditText


答案 1

您可以设置布局的属性,例如和android:descendantFocusability="beforeDescendants"android:focusableInTouchMode="true"

例:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mainLayout"
  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/changePass"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="167dp"
        android:ems="10"
        android:imeOptions="flagNoExtractUi"
        android:inputType="textPassword"
        android:maxLength="30" >
    </EditText>

</RelativeLayout>

愿这个有帮助;)


答案 2

XML 代码:

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:focusable="false"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30" >
</EditText>

Java 代码:

EditText edPwd = (EditText)findViewById(R.id.password);
edtPwd.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            v.setFocusable(true);
            v.setFocusableInTouchMode(true);
            return false;
        }
    });

在xml中设置可聚焦的false,并通过代码将其设置为true