Android底部返回键等虚拟键盘适配问题

本文介绍了解决Android应用在华为等设备上因虚拟键盘隐藏/显示导致底部评论、分享等区域被遮挡的问题。通过创建HuaWeiBottomUiFit工具类,监听视图布局变化,动态调整布局高度,确保应用能自适应底部虚拟按键的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:华为手机遮挡了文章底部的评论、分享、点赞等。


 需求:

需要安卓能自适应底部虚拟按键,用户隐藏虚拟按键时应用要占满整个屏幕,当用户启用虚拟键时,应用能往上收缩,等于是被底部虚拟按键顶上来。

解决方案:

监听某个视图的变化,当可以看见的高度发生变化时,就对这个视图重新布局,保证视图不会被遮挡,也不会浪费屏幕空间。这一点尤其可用在像华为手机等可以隐藏和显示虚拟键盘上导致屏幕变化的手机上。

添加工具类

public class HuaWeiBottomUiFit {

/**

* 关联要监听的视图 *

* @param viewObserving

*/

public static void assistActivity(ViewviewObserving) {

     new HuaWeiBottomUiFit(viewObserving);

}

private View mViewObserved;//被监听的视图

private int usableHeightPrevious;//视图变化前的可用高度

private ViewGroup.LayoutParamsframeLayoutParams;

 

private HuaWeiBottomUiFit(ViewviewObserving) {

   mViewObserved = viewObserving;

   //View添加全局的布局监听器

   mViewObserved.getViewTreeObserver().addOnGlobalLayoutListener(newViewTreeObserver.OnGlobalLayoutListener() {

       public void onGlobalLayout() {

           resetLayoutByUsableHeight(computeUsableHeight());

       }

   });

   frameLayoutParams = mViewObserved.getLayoutParams();

}

 

private void resetLayoutByUsableHeight(intusableHeightNow) {

   //比较布局变化前后的View的可用高度

   if (usableHeightNow != usableHeightPrevious) {

       //如果两次高度不一致

       //将当前的View的可用高度设置成View的实际高度

       frameLayoutParams.height = usableHeightNow;

       mViewObserved.requestLayout();//请求重新布局

       usableHeightPrevious = usableHeightNow;

    }

}

 

/**

 * 计算视图可视高度

 *

 *@return

 */

private int computeUsableHeight() {

   Rect r = new Rect();

   mViewObserved.getWindowVisibleDisplayFrame(r);

   return (r.bottom-r.top);

}

}

然后在你需要解决这个问题的ActivityonCreate方法的setContentView(R.layout.contentframe);后面添加上 setContentView(R.layout.contentframe);HuaWeiBottomUiFit.assistActivity(findViewById(android.R.id.content));

如果你看的懂代码,你肯定知道assistActivity方法里放入的View是你 要调整高度的视图。

解决后:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值