您的位置:首页 > 移动开发 > Android开发

activity和软键盘遮挡问题

2016-07-25 18:19 253 查看
今天解决了一个bug,就是魅蓝3手机的软键盘不能把dialog样式的activity顶起来,导致布局里的一部分看不到,我在网上查找解决方案,发现了如下几个方法,一一尝试了但是都没用。但是这几种方案对于解决其它款式的手机应该是有用的。

魅蓝3上的效果:



其它手机的正常效果:



以下是网上的解决方案:

Android软键盘遮挡的四种解决方案_百度经验

http://jingyan.baidu.com/article/86f4a73e77195e37d6526998.html

总结起来,就是

1、xml布局文件配置android:windowSoftInputMode=”参数”

2、代码配置android:windowSoftInputMode

3、布局外层嵌套一个scrollview,这样当软键盘弹出的时候会把布局顶上去。而我的魅蓝3手机的软键盘根本不能把布局顶上去,所以这个方法对于魅蓝3不可行。

4、自定义布局,重写onSizeChanged方法。为了解决这样的一个小bug要自定义一个布局,这样代码量比较大,所以我没有尝试,不知道在魅蓝3上是否可行。

我自己尝试了前三种方法都不可行。后来我又想,能不能在最外层嵌套一个relativelayout,然后监听软键盘弹出的状态,如果弹出就给relativilayout设置一个高度或者设置android:layout_alignParentTop=”true”,让它的子布局都可以展示出来,如果软键盘是隐藏的状态就设置 android:layout_centerInParent=”true”,这样就不会遮挡住子布局了,但是这样做出现了一个异常

RelativeLayoutLayoutParamscannotbecasttoandroid.widget.FrameLayoutLayoutParams

我根据网上的代码修改了下还是不对,我没有搞懂这个异常,所以失败了。

我也想过给通过判断软键盘的高度动态的设置margin值来让布局正好显示在软键盘的上方,但是感觉这样太繁琐了。

后来我就想了下面这个方法:

if (Build.MODEL.equals("m3")){
Log.i("LHD","share魅族3手机");
WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay(); // 为获取屏幕宽、高
android.view.WindowManager.LayoutParams p = getWindow().getAttributes();
p.height = (int) (d.getHeight() * 0.5); // 高度设置为屏幕的0.5
p.width = (int) (d.getWidth() * 0.9); // 宽度设置为屏幕的0.8
getWindow().setAttributes(p);
}else{
Log.i("LHD","share非魅族3手机");
}


因为我的这个bug只在魅蓝3上出现,所以我就获取手机型号,如果是魅蓝3我就给它的activity整体设置宽高来让布局显示出来,最后的效果是这样:



或者直接设置 p.y=-100;也是可以的,通过设置p.y的值可以调整dialog样式的activity的位置。

这个解决方案并不完美,在魅蓝3的发短信的页面,当输入短信内容的时候就软键盘可以把那个输入框顶上去。所以我想魅蓝3应该可以有办法让软键盘把布局顶上去的,但是现在时间紧张,所以只好先这样啦。以后再找找原因吧。如果哪位老大知道原因记得留言告诉我下啊。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息