Android输入法遮挡了输入框,使用android:fitsSystemWindows="true"后界面顶部出现白条

问题

1、页面布局文件:


2、配置文件不设置android:windowSoftInputMode属性;
效果图:

Android输入法遮挡了输入框,使用android:fitsSystemWindows=
image

3、加入android:fitsSystemWindows="true"后,解决了输入法遮挡了输入框的问题,但是界面顶部出现了状态栏高度的白条。

解决方法

1、自定义CustomLinearLayout(因为我页面最外层是LinearLayout)继承LinearLayout,重写fitSystemWindows和onApplyWindowInsets两个方法:

public class CustomLinearLayout extends LinearLayout {
    public CustomLinearLayout(Context context) {
        super(context);
    }
 
    public CustomLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
 
    public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
 
    @Override
    protected boolean fitSystemWindows(Rect insets) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            insets.left = 0;
            insets.top = 0;
            insets.right = 0;
        }
        return super.fitSystemWindows(insets);
    }
 
    @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH)
    @Override
    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            return super.onApplyWindowInsets(insets.replaceSystemWindowInsets(0, 0, 0, insets.getSystemWindowInsetBottom()));
        } else {
            return insets;
        }
    }
}

2、修改布局文件:


3、配置文件不设置android:windowSoftInputMode属性;
4、效果图:


Android输入法遮挡了输入框,使用android:fitsSystemWindows=
image.png

问题解决。

你可能感兴趣的:(Android输入法遮挡了输入框,使用android:fitsSystemWindows="true"后界面顶部出现白条)