安卓软键盘弹起导致标题栏移动解决办法

2020-09-07  本文已影响0人  田田ww

一、安卓设置页面随软键盘弹起布局进行调整,避免遮罩的步骤如下:

1.在Manifest文件对应的Activity配置代码中增加
android:windowSoftInputMode="stateVisible|adjustResize"

第一个属性设置软键盘是否随页面获取焦点而自动弹出

第二个属性设置页面是否随软键盘弹起而发生布局变化。

2.当配置步骤1不生效时,需在对应的布局文件中添加
android:fitsSystemWindows="true"

两步设置后对所有布局都可以生效。

二、随软键盘弹起标题栏与状态栏距离增大解决方法

由于某些页面设置状态栏状态为透明,步骤2会自动给状态栏增加一个与之宽度一样的padding,此时就可能出现,状态栏和标题栏中间间隔变大的情况。
解决方法:在对应活动页面使用自定义布局,Java代码如下

public class CustomRelativeLayout extends RelativeLayout {

    private int[] mInsets = new int[4];
    public CustomRelativeLayout(Context context) {
        super(context);
    }

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

    public CustomRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public CustomRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

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

    @Override
    protected final boolean fitSystemWindows(Rect insets) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //将标题栏平移padding位移置0

            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);
    }
}

这段代码对相对布局进行了自定义,重写fitSystemWindows()方法,通过将标题栏上左右偏移量固定为0来限制标题栏位移。

上一篇 下一篇

猜你喜欢

热点阅读