当前位置: 首页 > 知识库问答 >
问题:

用于EditText的Request Focus()不适用于运行android P(API 28)的设备

丁昌翰
2023-03-14

我正在使用EditText的来接受一个OTP,其中用户一旦在字段中输入数字等,就会专注于下一个EditText。它在所有设备上都可以正常工作。但在运行android OS P的设备上,即API 28,Request estFocus()不起作用,并且用户无法将数字输入到连续的EditText,因为焦点不会自动移动。

这是代码-默认情况下,所有EditText的都禁用以防止打开系统键盘。我正在使用我自己的CustomKeybaord来接受数字。但是它可以工作,除了Android P。

mEtCode1.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            Log.d("BEFORE_", charSequence.toString());
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            hideError(charSequence.toString());

            if (!charSequence.toString().isEmpty()) {
                mEtCode2.requestFocus();
                mEtCode1.setBackground(getResources().getDrawable(R.drawable.verify_code_edit_text_background));
                mEtCode2.setBackground(getResources().getDrawable(R.drawable.verify_code_edit_text_background));
                mEtCode1.setEnabled(false);
            }

        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

请帮帮我这个

提前谢谢你

共有3个答案

谢典
2023-03-14

以下是 requestFocus 方法的官方文档。它指出,仅当要为其提供焦点的所需视图已启用,具有大小,可见,可聚焦且可聚焦的InTouchMode时,它才有效。

我有完全相同的问题。我使用数据绑定来设置EditText的启用状态。我意识到requestFocus不起作用,因为由于一些未知的原因,数据绑定无法及时启用我的textview。

这是我的代码:

/*
    setMyEditTextEnabled is my method to which my view is binded i.e.
    android:enabled="@{vm.myEditTextEnabled, default=false}"
    This worked for all version except Android P because it has
    some timing issues with API 28 (not sure what)
 */
        //binding.getVm().setMyEditTextEnabled(true);
/*
    So to make it work, I am enabling my EditText directly and
    it works for all versions.
 */
        binding.myEditText.setEnabled(true);
        binding.myEditText.requestFocus();

此外,如下文所述:编辑文本请求焦点不起作用也将可聚焦和可聚焦的InTouchMode设置为true。

简而言之,我的观点是确保您的编辑文本满足官方文档中提到的所有要求,以便requestFocus工作。

袁法
2023-03-14

这是Android P的问题,对我有用的是下面的代码块,所以在这里分享一下:

enterOtpTextFrame.postDelayed(Runnable {
            enterOtpTextFrame.requestFocus()
        }, 100
        )

我们需要调用requestFocus,并延迟一小段时间。在我的例子中,它是100毫秒。

洪博艺
2023-03-14

我在带有Android P sdk的设备上的OTP屏幕也遇到了同样的问题。问题是我将editText的高度和宽度设置为0dp,这在android P中是焦点禁用,如Android P更改日志中的Android Developer页面所述:android-9.0-更改-28#用户界面-更改

面积为0的视图(宽度或高度为0)不再可聚焦。

 类似资料:
  • 我找了一整天,尝试了大部分的解决方案,但仍然没有成功。在上是否存在的bug? 我有2个字段(调用),是必填字段。当我将留空并输入到,然后输入时,我希望它聚焦回,并显示错误弹出窗口“必填字段为空!”。 但是现在,中的光标仍然不集中,并显示错误 这是我的代码,当按下回车键时,是我上面提到的edtA: 这是edtA的XML: 有人能帮忙吗?谢谢你的时间。 更新:在尝试了所有建议但没有任何改变后,我决定使

  • 我有一个全屏活动,其中某些布局元素隐藏起来,让位于容器内的一个片段(FrameLayout)。布局如下所示: 片段布局如下所示: 如您所见,在我的片段布局中,我包含了另一个名为input_view的布局。其布局文件如下所示: 这是从以下来源获得的幻灯片面板:https://github.com/mancj/SlideUp-Android,它主要是一个编辑文本视图,在回收器视图项目的单击事件上向上滑

  • 代码如下: 这是适配器,我在这里为列表做了自己的设计(< code>R.layout.zalistu),它在仿真器中工作,但在设备上它给我一个错误(应用程序意外停止),如果我使用< code>simple_list_item_1,那么它在仿真器和我的设备上都可以正常工作。 这里是R:layout.zalistu: 日志猫: 我设备上的Android版本是2.3.7,模拟器上的版本是4.0.4(AP

  • 我正在尝试为中的每一行设置 突出显示。 我有一个可绘制的资源文件: 我已经在三星Galaxy S5设备上进行了测试,该设备可以正常工作。但是,当我在安装了Android 4.4.2的中兴Compel设备上进行测试时,它不起作用。 我的应用程序针对API 15及更高版本。 任何想法为什么这样: 不能在Android4.4.2设备上工作? 日志中的错误: 由以下原因引起:组织:二进制 XML 文件行

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。