Android 虚拟键盘遮挡住页面问题我遇到的坑及个人解决办法

场景:某个页面多个组件。总体排版正好凑成满屏。一切按照UI给的标注效果图来。大部分机型测试通过。没有问题。华为手机有问题

兼容性:华为手机修改了虚拟键盘的位置。用户可以自由控制显示与隐藏虚拟键盘出现在屏幕底部。会遮挡住部分页面

如下图:


用户协议部分被虚拟键盘遮挡了。

通过网上查询:大部分介绍解决办法是:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
android:fitsSystemWindows="true"

个人通过依次添加。尝试。。发现并无卵用。

其他介绍也没有好的解决方案。

最后通过查询尝试:

发现原因在于。。个人使用的是没有考虑虚拟键盘情况下的标注图,并且 使用线性布局LinearLayout就;  因为此布局是一直顺序排版下去的。按照标注占满全屏。所以尝试修改了布局为相对布局:从俩边开始布局,向中间靠拢。。最后发现问题解决。布局的话举个例子比较直观。

1、有问题的布局(LinearLayout):

 <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
     >
<TextView
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:text="孙磊"
    android:background="@color/as_qianlu"
    android:gravity="center"
    />
 <TextView
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:layout_marginTop="480dp"
     android:text="孙磊"
     android:background="@color/as_qianlu"
     android:gravity="center"
     />
 </LinearLayout>

2、修改后的布局(RelativeLayout)

   

<RelativeLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     >
<TextView
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:text="孙磊"
    android:background="@color/as_qianlu"
    android:gravity="center"
    android:layout_alignParentTop="true"
    />
     <TextView
         android:layout_width="match_parent"
         android:layout_height="50dp"
         android:text="孙磊"
         android:background="@color/as_qianlu"
         android:gravity="center"
         android:layout_alignParentBottom="true"
         />
 </RelativeLayout>

最后在demo 中发现效果并没有实现。。

原来。还差了一步。项目中设置了theme。activity 的 theme 的设置。尝试几个试试

android:theme="@style/Theme.Design.NoActionBar"

上面的theme是可以。

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

这个也可以。。都没有遮挡的问题。

我自己项目中的是的是沉浸式处理。

使用的是

android:theme="@style/AppTheme.TranslucentStatus"

这个api 19的问题里添加的模块。

具体 还有那些theme可以使用。我并没有测试。大家需要的话请自行研究

最后:发一下成功了以后的效果图


上面华为荣耀9 青春版。隐藏虚拟键盘情况下截图


上面是华为荣耀9 青春版。虚拟键盘存在情况下的 效果图。

总结:像我这种情况。就是修改布局为RelativeLayout
+设置activity的theme    问题解决

每个人遇到的具体情景不同。解决办法也不相同。希望我的经历能帮到你


猜你喜欢

转载自blog.csdn.net/a872822645/article/details/79701877
今日推荐