900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > android 控件遮盖 Android手机软键盘遮挡布局控件

android 控件遮盖 Android手机软键盘遮挡布局控件

时间:2021-05-29 04:21:37

相关推荐

android 控件遮盖 Android手机软键盘遮挡布局控件

在Activity中的布局的下方有EditText获取焦点弹出软键盘的时候,如果不作处理,软键盘可能会遮挡输入框或者一些按键,这样的用户体验比较差。

这里整理了几种处理方式,可以使页面整体上移。并且提供一种个人比较喜欢的方法。

网上常见的三种:

1.修改AndroidManifest.xml文件

Android:windowSoftInputMode="stateVisible|adjustResize"

2.在Activity中添加配置

在activity中的onCreate中setContentView之前写上这个代码:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

其实第二中方式与第一种是一样的,只不过放的位置不同而已。

3.在布局文件中添加ScrollView

把顶级的layout替换成ScrollView,或者说在顶级的Layout上面再加一层ScrollView。

这样就会把软键盘和输入框一起滚动了,软键盘会一直处于底部。

个人推荐

上面三种都是比较简单处理,但灵活性较低。软键盘使整体上移可能造成一些控件上移出屏幕无法展示。以下方式就可以比较灵活的控制底部显示的控件是什么。

先看下效果图:

软键盘.gif

将如下方法放到onCreate初始化View之后就可以。

/**

* 1、获取main在窗体的可视区域

* 2、获取main在窗体的不可视区域高度

* 3、判断不可视区域高度

* ①大于180:键盘显示 获取Scroll的窗体坐标,算出main需要滚动的高度,使scroll显示。

* ②小于180:键盘隐藏

* 该值根据屏幕可以做出修改,在大屏手机上可以适当的调大,不然会出现问题。

*

* @param main 根布局

* @param scroll 需要显示的最下方View

*/

public void addLayoutListener(final View main, final View scroll) {

main.getViewTreeObserver().addOnGlobalLayoutListener(() -> {

Rect rect = new Rect();

main.getWindowVisibleDisplayFrame(rect);

int mainInvisibleHeight = main.getRootView().getHeight() - rect.bottom;

if (mainInvisibleHeight > 180) {

int[] location = new int[2];

scroll.getLocationInWindow(location);

int scrollHeight = (location[1] + scroll.getHeight() + ((RelativeLayout.LayoutParams) scroll.getLayoutParams()).bottomMargin) - rect.bottom;

if (scrollHeight > 0) {

main.scrollTo(0, scrollHeight);

}

} else {

main.scrollTo(0, 0);

}

});

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。