requestTeocus()for EditText无法在运行android P的设备上运行(API 28)

Yog*_*kar 10 android

我正在使用EditText's接受OTP,EditText一旦用户将数字输入到字段中,用户就会关注下一个OTP .它适用于所有设备.但是在运行Android OS P即API 28的设备上,requestFocus()无法正常工作,并且EditTexts由于焦点不会自动移动,因此用户无法输入连续数字.

这是代码 - 默认情况下EditText's都禁用以防止打开系统键盘.我用我自己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) {

        }
    });
Run Code Online (Sandbox Code Playgroud)

请在这件事上给予我帮助

先感谢您

Han*_*eno 9

使用Android P sdk的设备上的OTP屏幕出现相同的问题。问题是我将editText的高度和宽度设置为0dp,这是在android P中禁用焦点,如Android P更改日志中的Android开发人员页面所述: android-9.0-changes-28#ui-changes

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


Abd*_*han 1

这是requestFocus方法的官方文档。它指出,仅当您想要获得焦点的所需视图已启用、具有大小、可见、可聚焦且为 FocusableInTouchMode 时,它​​才有效。

我有完全相同的问题。我正在使用数据绑定来设置EditText 的启用状态。我意识到 requestFocus 不起作用,因为由于某些未知原因,数据绑定没有及时启用我的文本视图。

这是我的代码:

/*
    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();
Run Code Online (Sandbox Code Playgroud)

另外,如以下帖子中所述:EditText requestFocus 不起作用 请设置focusablefocusableInTouchMode请同时

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