本文转载自:http://blog.csdn.net/u014583590/article/details/55263141

虚拟按键在华为手机中大量存在,而虚拟按键的存在无疑增加了屏幕适配的难度,往往许多时候我们的界面需要根据虚拟按键的显示与否(虚拟按键的显示隐藏是用户可以动态调整的)来调整界面的ui显示,但Android系统本身(似乎)并没有提供此类接口(PS:反正我没找到类似接口),经过研究得到一个可用的方式。 
android手机界面分为SystemUi【包括status bar(状态栏)以及navigation bar(导航栏/虚拟按键)】和content,在android系统中content的id是 android.R.id.content,所以思路就是通过监听content布局的改变来间接监听虚拟按键的显示与隐藏;具体代码如下:

“` 
public class BaseActivityForAuto extends Activity implements ViewTreeObserver.OnGlobalLayoutListener { 
FrameLayout content; 
private static final String TAG = “BaseActivityForAuto”; 
private boolean mLayoutComplete = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
content = (FrameLayout) findViewById(android.R.id.content);
content.post(new Runnable() {
@Override
public void run() {
mLayoutComplete = true;
Log.e(TAG, "content 布局完成");
}
});
content.getViewTreeObserver().addOnGlobalLayoutListener(this); } @Override
protected void onPause() {
super.onPause();
Log.e(TAG, "super.onPause();");
} @Override
protected void onResume() {
super.onResume();
Log.e(TAG, "super.onResume();");
} @Override
public void onGlobalLayout() {
Log.e(TAG, "onGlobalLayout");
if (!mLayoutComplete)
return;
onNavigationBarStatusChanged();
} protected void onNavigationBarStatusChanged() {
// 子类重写该方法,实现自己的逻辑即可。
} @Override
protected void onDestroy() {
super.onDestroy();
content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}

}

其他的activity继承该activity即可。

android监听虚拟按键的显示与隐藏【转】的更多相关文章

  1. Android通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Home按键消息

    Android对屏幕下方经常使用的四个按键消息处理是不一致的: 1.搜索按键的消息在onKeyDown或者onKeyUp中接收: 2.菜单按键的消息在onCreateOptionsMenu.onKey ...

  2. Android监听消息通知栏点击事件

    Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...

  3. Android监听系统短信数据库变化-提取短信内容

    由于监听系统短信广播受到权限的限制,所以很多手机可能使用这种方式没法监听广播,从而没办法获取到系统短信,所以又重新开辟一条路. Android监听系统短信数据库内容变化使用场景: 1.监听短信数据库的 ...

  4. Android监听返回键、Home键+再按一次返回键退出应用

    Android监听返回键需重写onKeyDown()方法 Home键keyCode==KeyEvent.KEYCODE_HOME @Override public boolean onKeyDown( ...

  5. Android监听来电和去电

    要监听android打电话和接电话,只需下面2步骤1.第一步,写一个Receiver继承自BroadcastReceiver import android.app.Service; import an ...

  6. Android监听应用程序安装和卸载

    Android监听应用程序安装和卸载 第一. 新建监听类:BootReceiver继承BroadcastReceiver package com.rongfzh.yc; import android. ...

  7. Android监听ScrollView滑动到顶端和底部

    Android监听ScrollView滑动到顶端和底部     package cn.testscrollview; import android.os.Bundle; import android. ...

  8. JS监听组合按键

    有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 下面简单梳理一下思路: 我们所熟悉的按键有这么集中类型: 单独的按键操作,如:delete ...

  9. Android 监听网络变化

    Android 监听网络变化

随机推荐

  1. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) C. Destroying Array -- 逆向思维

    原题中需要求解的是按照它给定的操作次序,即每次删掉一个数字求删掉后每个区间段的和的最大值是多少. 正面求解需要维护新形成的区间段,以及每段和,需要一些数据结构比如 map 和 set. map< ...

  2. Hibernate基础(二)

    Hibernate中的实体规则 创建实体类注意事项: 1.持久化类提供无参构造函数 2.成员变量私有 提供共有get set 方法 3.属性应尽量使用包装类 Integer.Float.Double等 ...

  3. angular js 公告墙

    <!DOCTYPE html>   <html lang="en">   <head>   <meta charset="UTF ...

  4. Linux rsync配置用于服务器之间传输大量的数据

    Linux的rsync 配置,用于服务器之间远程传大量的数据   [教程主题]:rsync [课程录制]: 创E [主要内容] [1] rsync介绍 Rsync(Remote Synchronize ...

  5. c# cookie帮助类

    using System; using System.Collections.Generic; using System.Text; using System.Web; namespace Matic ...

  6. 如何将一个已有的项目托管到github或是码云上?git的配置

    场景一:已有的一个项目,要把它托管到Git上去,步骤和方法如下: 方法一: ①在工程的路径下 : git init 建一个裸仓库. ②远程仓库地址 :将本地的仓库和远程仓库关联 git remote ...

  7. vue-router 嵌套路由没反应

    先看下route.js //route.js const App = () => import('../App.vue'); const Login = () => import('../ ...

  8. Apex语言(三)原始数据类型

    1.原始数据类型(Primitive) 整数:Integer 双精度:Double 单精度:Decimal 长整型:Long 日期:Date 日期时间:Datetime 字符串:String ID:I ...

  9. day002 计算机基础之 操作系统和编程语言的分类

    &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp今天主要针对计算机基础中的操作系统和编程语言的分类进行了讲解. 操作系统 &nbsp ...

  10. eas之KDPrinter控件

    初始化打印控件KDPrinter ctrlPrinter = new KDPrinter(); 增加列 // 指定插入位置table.addColumn(index);// 插入到最后table.ad ...