一、安卓设置页面随软键盘弹起布局进行调整,避免遮罩的步骤如下:
1.在Manifest文件对应的Activity配置代码中增加
android:windowSoftInputMode="stateVisible|adjustResize"
第一个属性设置软键盘是否随页面获取焦点而自动弹出
第二个属性设置页面是否随软键盘弹起而发生布局变化。
-
stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
-
stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
-
stateHidden:用户选择activity时,软键盘总是被隐藏
-
stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
-
stateVisible:软键盘通常是可见的
-
stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
-
adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
-
adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间(可以显示全部屏幕)
-
adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分(软键盘会遮挡屏幕)
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来限制标题栏位移。
网友评论