美文网首页
解决状态栏透明时adjustResize无效的问题

解决状态栏透明时adjustResize无效的问题

作者: lxbnjupt | 来源:发表于2018-03-25 21:04 被阅读0次

设置状态栏透明,当界面存在EditText时,在activity里面设置windowSoftInputMode:adjustResize 无效,软键盘依然会遮挡住EditText的焦点位置。
在activity的根布局上添加fitsSystemWindows="true",然后adjustResize就可以成功的起作用了。但是在这种情况下,你的titlebar会下移statusbar的高度的距离。所以就必须重写一个layout继承自你所使用的layout,并重写其中的两个方法。

public class CustomInsetLayout extends LinearLayout {

    private int[] mInsets = new int[4];

    public CustomInsetLayout(Context context) {
        super(context);
    }

    public CustomInsetLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomInsetLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public final int[] getInsets() {
        return mInsets;
    }

    @Override
    protected final boolean fitSystemWindows(Rect insets) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // Intentionally do not modify the bottom inset. For some reason,
            // if the bottom inset is modified, window resizing stops working.
            // TODO: Figure out why.

            mInsets[0] = insets.left;
            mInsets[1] = insets.top;
            mInsets[2] = insets.right;

            insets.left = 0;
            insets.top = 0;
            insets.right = 0;
        }

        return super.fitSystemWindows(insets);
    }
}

然后xml布局文件就类似如下形式:

<com.boohee.one.widgets.CustomInsetLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            
            //其它布局代码

        </LinearLayout>
    </ScrollView>
</com.boohee.one.widgets.CustomInsetLayout>

相关文章

网友评论

      本文标题:解决状态栏透明时adjustResize无效的问题

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