Android设置windowIsFloating为false的dialog可以被软键盘顶起

做需求要求dialog可以被软键盘顶起来而不是覆盖,找了找方法后发现,将主题中的windowIsFloating属性设置为true时就可以达到想要的效果,windowIsFloating意思是dialog是否悬浮在activity上

 true

但是,windowIsFloating设置为true的时候dialog可屏幕两边总有一段空白,不能达到全屏宽,然后看了PhoneWindow的源码发现,windowIsFloating决定了dialog使用两套不同的xml布局,笔者猜是在布局里有padding或者margin,然后笔者在源码中发现:


 
        mIsFloating = a.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating, false);
        int flagsToUpdate = (FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR)
                & (~getForcedWindowFlags());
        if (mIsFloating) {
            setLayout(WRAP_CONTENT, WRAP_CONTENT);
            setFlags(0, flagsToUpdate);
        } else {
            setFlags(FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR, flagsToUpdate);
        }

windowIsFloating为true时会设置不同的Flags,笔者试着将源码直接使用到笔者的自定义dialog中,dialog可以被软键盘顶起来了!!!
后面我又做了测试发现是FLAG_LAYOUT_IN_SCREEN这个值起了效果,笔者没有继续探索具体原因,现在可以达到需求的要求了

你可能感兴趣的:(android)