android获取虚拟功能键高度

本文介绍了一种在Android 5.0及以上版本中通过反射机制获取虚拟功能键高度的方法,以此解决因虚拟键造成的UI特效操作定位不准确的问题。

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

问题由来:

android 5.0 后,系统提供了虚拟功能键的功能,这使得我们在做一些UI特效操作时,会因为虚拟键的干扰而遭受定位不准的问题。所以,怎么获得虚拟功能键高度,就成了解决这个问题的关键了。

我的思路:
  • 因为有了虚拟功能键后,WindowManager的.getDefaultDisplay().getHeight();方法获取的是标准高度。
    想要获得完整的高度的话,就得通过反射调用。
  • 先通过反射获得整个屏幕的完整高度,再用此减去标准高度,那么得到的就是虚拟键Bar的高度了。
具体代码:
/**获取虚拟功能键高度 */
 public int getVirtualBarHeigh() {
        int vh = 0;
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = windowManager.getDefaultDisplay();
        DisplayMetrics dm = new DisplayMetrics();
        try {
            @SuppressWarnings("rawtypes")
            Class c = Class.forName("android.view.Display");
            @SuppressWarnings("unchecked")
            Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
            method.invoke(display, dm);
            vh = dm.heightPixels - windowManager.getDefaultDisplay().getHeight();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return vh;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值