Android 监听NavigationBar
来源:互联网 发布:宁化老鼠干 知乎 编辑:程序博客网 时间:2024/06/11 16:38
1、闲聊
先说说我这儿为什么要监听NavigationBar它吧,是这么个事儿,我发现我的PopupWindow在,华为手机及其他有底部虚拟按键的手机上会被,该手机自带的虚拟按键 遮挡 或者留出 空白 ,那么我想怎么办呢?要不通过反射去取出NavigationBar吧?但是不是每个手机都有的!这儿我就一直想啊一直想怎么通过NavigationBar来监听!最后我发现的走入了一个误区!什么呢?我看了一下我原先改状态栏颜色是的代码:
android.support.v7.widget.ViewStubCompat{4a7e920c G.E..... ......I. 0,0-0,0 #7f0e0083 app:id/action_mode_bar_stub}android.support.v7.widget.ContentFrameLayout{4a7f4c84 V.ED.... ......I. 0,0-0,0 #1020002 android:id/content}
就是整个屏幕大体就分为两个部分:系统和我们可操作的页面部分。到了这里就好做啊!我可以直接监听 内容(AndroidContent)部分的边界值改变啊!好了不逼逼了,上代码吧。
2、代码
获取内容部分并设置边界改变监听:
View androidContent = findViewById(Window.ID_ANDROID_CONTENT);androidContent.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { Log.d(TAG, "onLayoutChange: " + v.getHeight()); //在这里写改变后的操作 }});
大家可以放心使用这个方法,可以看到这个方法是在Andorid api 11 的时候引入的,在如今基于Android 4.4.2 开发的时代,完全没有任何问题!
最后我再提供两个方法来判断NavigationBar的显示隐藏:
/** * 获取当前屏幕高度(px) * * @param context * @return 当前屏幕高度(px) */public static int getScreenHeight(Context context) { return context.getResources().getDisplayMetrics().heightPixels;}/** * 获取设备的状态栏高度(px) * * @param context * @return 设备的状态栏高度(px) */public static int getScreenStatusBarHeight(Context context) { //获取status_bar_height资源的ID int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { //根据资源ID获取响应的尺寸值 return context.getResources().getDimensionPixelSize(resourceId); } return -1;}
判断:
View androidContent = findViewById(Window.ID_ANDROID_CONTENT);androidContent.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { Log.d(TAG, "onLayoutChange: " + v.getHeight()); if (getScreenHeight(context) - getScreenStatusBarHeight(context) == v.getHeight()) { //这写NavigationBar隐藏时的操作 } else { //这儿写NavigationBar显示时的操作 } }});
这个方法应该算比较完美的了!有问题及时交流!
阅读全文
0 0
- Android 监听NavigationBar
- Android NavigationBar
- NavigationBar home recent 按钮监听
- 让Android显示NavigationBar
- Android NavigationBar作用
- Android适配NavigationBar问题
- Android 获取NavigationBar高度
- 如何Android中自定义Navigationbar
- 如何Android中自定义Navigationbar
- 如何Android中自定义Navigationbar
- android StatusBar和NavigationBar分析
- Android NavigationBar 显示 Menu 按键
- Android NavigationBar横屏修改
- navigationBar
- Navigationbar
- NavigationBar
- android监听全局监听
- android 监听
- echarts图笔记
- android面试-android几种进程
- maven方式下载源码
- 爬楼梯
- MyEclipse部署项目出错:Deployment is out of date due to changes in the
- Android 监听NavigationBar
- UML类图学习
- 微信小程序开发一入门开发标记语言基础组件
- C++编程习惯
- 【Android training】保存数据
- 阻塞非阻塞与同步异步的区别
- switch语句实现成绩转换
- AGC 014
- 链表(一)