android监听虚拟按键的显示与隐藏【转】

本文转载自: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即可。

转载于:https://www.cnblogs.com/zzb-Dream-90Time/p/7442519.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值