直播视频小窗口完美适配

2020-07-14  本文已影响0人  fyg

产品需求是: 视频小窗口要占当前窗口的 1/3 , 商品列表占 2/3

之前测试提到直播视频小窗口和购物袋在某些机型上会有间隔问题,如下图

视频小窗口问题1.jpeg

正常情况下的显示效果如下图:

视频小窗口2.png

出现该问题的原因是因为:

1 ,某些机型底部有虚拟物理键,
2 ,某些手机是全面屏无虚拟物理键,但用代码判断是否有无虚拟物理键和 虚拟物理键高度时有兼容性问题所致 。

正常思路为:

屏幕的总高度为: 状态栏 + View的显示区域 + 虚拟键盘的高度
(状态栏,由于在我们app中始终显示,故忽略)

由于android设备总多,获取虚拟按键是否显示,及高度的方法 ,不通用,有 兼容性,,这种方式经实践,不可行。

非正常思路为:

由于当前界面【View的显示区域】(视频小窗口区域+商品列表区域)在每个手机上是固定的,我们可以可以在代码中 计算【View的显示区域】,由于当前界面是一个dialog 在setContentView后,界面布局,测量还未完成,获取【View的显示区域】高度是获取不到的,所以,需要使用View.post 【最好用handler.post,它们有是区别的!!!不然会不执行】或如下方法,等界面油量完后,在获取高度,进行缩放显示。

public static void addOnGlobalLayoutListener(final View view, final Runnable runnable) {

        if (view == null || runnable == null) {
            return;
        }
        ViewTreeObserver vto = view.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @SuppressWarnings("deprecation")
            @Override
            public void onGlobalLayout() {
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                    view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                } else {
                    view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                }
                if (runnable != null) {
                    runnable.run();
                }
            }
        });
    }

注意点:

1 ,缩放整个直播页面【View的显示区域】高度为原来的 1/3
2,设置dialog中商品列表的高度为 【View的显示区域】的 2/3 ,dialog上半部分为透明的,触摸可关闭当前dialog.
3,设置缩放View的中心点为 (【View显示区域】的宽/2,0)

如下方式经测试有兼容性问题,请忽略

Android 获取屏幕宽度和高度的几种方法

Android--›状态栏高度,导航栏高度,Window高度,DecorView高度,heightPixels

【Android】判断当前手机是否有虚拟按键

关注我的github

https://github.com/fuyuguang
带你了解更多项目实践中的bug

上一篇下一篇

猜你喜欢

热点阅读