创建Activity时如何让EditText不聚焦

新手上路,请多包涵

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

目前,这是我的 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>

这是我提出活动时的样子:

在此处输入图像描述

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

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

在此处输入图像描述

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

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

原文由 Michael Yaworski 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 445
2 个回答

您可以设置 Layout 的属性,例如 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>

希望这个有用;)

原文由 Pratik Butani 发布,翻译遵循 CC BY-SA 3.0 许可协议

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 中设置 focusable false 并通过代码将其设置为 true

原文由 Meher 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题