美文网首页
SOFT_INPUT_STATE_ALWAYS_VISIBLE在

SOFT_INPUT_STATE_ALWAYS_VISIBLE在

作者: 小马要加油 | 来源:发表于2020-05-18 16:21 被阅读0次

在低版本上,如果启动Activity/dialog想要自动焦点到编辑框,有很多种方式,其中一种是SOFT_INPUT_STATE_ALWAYS_VISIBLE

mDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
                | WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

在升级到Android9.0之后,发现软键盘没有弹出来,也没有焦点。
system_process E/InputMethodManagerService: SOFT_INPUT_STATE_ALWAYS_VISIBLE is ignored because there is no focused view that also returns true from View#onCheckIsTextEditor()
看了看源码,然后百度了下看有没有哥们已经踩坑的,让我发现了一篇
Android api 28 9.0 EditText无法自动弹出软键盘(windowSoftInputMod stateAlwaysVisible targetSdkVersion)文章,这个哥们写的很清晰诙谐.

解决:这个哥们有提到直接对控件进行requestFocus,我这边测试是可行的,可是,如果界面很复杂,复杂到你根本就不知道应该哪个输入框拿焦点呢?
我们需要找到第一个该拿到焦点的编辑框。可以使用这个方法:

private boolean mHasFoundFocus = false;
    private void requestFocus(ViewGroup viewGroup) {
        if (viewGroup == null ||mHasFoundFocus) {
            return;
        }
        for (int i = 0; i < viewGroup.getChildCount(); i++) {
            View view = viewGroup.getChildAt(i);
            if (view instanceof ViewGroup && View.VISIBLE == view.getVisibility()) {
                requestFocus((ViewGroup) view);
            } else if (view instanceof EditText) {
                if (view.requestFocus()) {
                    mHasFoundFocus = true;
                    return;
                }
            }
        }
    }

其实最简单的还是要弄明白,android 9.0为什么要这么弄,这样操作之后是不是SOFT_INPUT_STATE_ALWAYS_VISIBLE已经没用了,有大佬知道为虾米吗?

2020/5/19 补充一下

有时候看代码不是注解 真的是浪费很多时间哎 ,

/**
         * Visibility state for {@link #softInputMode}: please always make the
         * soft input area visible when this window receives input focus.
         *
         * <p>Applications that target {@link android.os.Build.VERSION_CODES#P} and later, this flag
         * is ignored unless there is a focused view that returns {@code true} from
         * {@link View#isInEditMode()} when the window is focused.</p>
         */
        public static final int SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5;

这边注解明明白白清清楚楚的写着 在Android P已经失效了,除非在edit mode

相关文章

  • SOFT_INPUT_STATE_ALWAYS_VISIBLE在

    在低版本上,如果启动Activity/dialog想要自动焦点到编辑框,有很多种方式,其中一种是SOFT_INPU...

  • 《在 在 在》

    在荒凉的海滩边, 在无边无垠的旷野上, 在茂密、阴森而诡诘的森林里, 赤身裸体, 肌肤光明, 两人不死不休的做爱…...

  • 在 在 在

  • 在长大,在失去,在努力,在接受

    小时候不懂得长大的意义,一直盼着长大,但是长大后你会发现,长大的代价太过昂贵,长大的你会失去很多东西,但是你还不得...

  • 在长大、在接受、在失去、在成长

    而立之年,转身、回眸,每一次尝试,都是成长路上必经的驿站。 第一站 童年的记忆里,我是一个很同龄人不一样的小孩,没...

  • 山在 海在 岁月在 我在

    ——卓夫文暄 混职场的社畜且不论菜鸟老鸟 大多聪明又精明且又心思缜密 他们的牙齿如刺似箭,他们的舌头是快刀 闽和南...

  • 眼在、耳在、手在、神在

    我有个同事的好朋友,她儿子从上小学开始,学习就非常让她头疼,作业几乎不会做,每次她都要重新把知识讲一遍,然后才能继...

  • 在!在!还在!

    儿子两岁前,我们住在平洲,离现在住的地方差不多10公里。儿子小的时候,爷爷经常带着他去附近的平洲公园玩。最近...

  • 在路上,在思考,在挣扎

    80后的我们,青春早已逝去,不再轻狂,不再洒脱,不再微笑......在一些过后,我们有的更多的是在于生活中...

  • 我在     山在      大地在。

    岁月在。我在。你还要怎样更好的世界

网友评论

      本文标题:SOFT_INPUT_STATE_ALWAYS_VISIBLE在

      本文链接:https://www.haomeiwen.com/subject/xwguohtx.html