EditText的requestFocus()在运行android P(API 28)的设备上不起作用

EditText的requestFocus()在运行android P(API 28)的设备上不起作用,android,Android,我正在使用EditText的来接受OTP,在OTP中,用户在字段中输入一个数字后,将注意力集中在下一个EditText,依此类推。它可以在所有设备上正常工作但在运行android OS P的设备上,即API 28,requestFocus()不起作用,并且用户无法在连续的editText中输入数字,因为焦点不会自动移动 以下是代码-默认情况下,禁用所有EditText的,以防止打开系统键盘。我正在使用自己的CustomKeybaord接受数字。然而,除了安卓P,它还能工作 mEtCode1.ad

我正在使用
EditText的
来接受OTP,在OTP中,用户在字段中输入一个数字后,将注意力集中在下一个
EditText
,依此类推。它可以在所有设备上正常工作但在运行android OS P的设备上,即API 28,
requestFocus()
不起作用
,并且用户无法在连续的
editText
中输入数字,因为焦点不会自动移动

以下是代码-默认情况下,禁用所有
EditText的
,以防止打开系统键盘。我正在使用自己的
CustomKeybaord
接受数字。然而,除了安卓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) {

        }
    });
请帮我做这个


谢谢,请提前

这是方法的官方文档。它在那里声明,它仅在您想要聚焦的所需视图已启用、大小、可见、可聚焦且可聚焦到触摸模式时才起作用

我有完全相同的问题。我使用数据绑定来设置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


简言之,我的观点是确保您的编辑文本符合官方文件中提到的所有要求,以便请求Focus工作。

我在使用Android p sdk的设备上的OTP屏幕也有同样的问题。问题是我将editText的高度和宽度设置为0dp,这在android P中是焦点禁用, 如Android P更改日志中的Android开发者页面所述:

面积为0(宽度或高度为0)的视图不再具有焦点


这是Android p的问题。对我有效的是以下代码块,所以在这里分享:

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

我们需要调用requestFocus,并使用postDelayed调用少量时间。在我的情况下,它是100毫秒。

你能发布你的code@jle在我的例子中,它依赖于操作系统,对于其余的android操作系统版本,它工作正常。@Sniffer我只调用一行代码,即
onRequestFocus()
这不起作用,我没有关注
EditText
。请在清单文件android:WindowsofInputMode=“StateAllwaysVisible”中检查这一点。谢谢它救了我一天。就是这样。非常感谢。带着我,带着我,带着我,带着我去寻找这个。非常感谢你。