常见问题2016/09/20

【APP开发】Android 4.0 实现修改桌面底部的状态栏

Android 4.0 桌面底部状态栏分为两个部分:左边是三个导航键:从左置右依次是:返回键 ,Home键和RecentApplication键,就是查看最近打开的所有程序,多任务切换就在这里。 这三个键为一个区域 叫NavigationArea,即导航区。  最右边是NotificationArea,也就是提示信息区,有电量,无线信号,蓝牙等信息显示。 这条StatusBar,是无论打开哪个程序都会显示在最下方的。

客户的要求需要把底部状态栏进行隐藏,通过物理按键进行操作就可以了,这些虚拟按键还有右边的状态导航都全部隐藏。我最初以为在Launcher里面实现的,看代码看了看了半个多小时居然连个返回按钮的图标都没有找到。心里想打开任意程序居然都可以显示在下方应该是系统UI把,我就试着去(frameworks/base/packages/SystemUI/res)下面的drawable理解找“返回键”图标,居然找到了,心里尽是欢喜。顺藤摸瓜最后找到图标所属的java类是TabletStatusBar.java(frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/tablet)在找到该类下的makeStatusBarView()方法就可以看到

// The navigation buttons

      mBackButton = (ImageView)sb.findViewById(R.id.back);

      mNavigationArea = (ViewGroup) sb.findViewById(R.id.navigationArea);

       mHomeButton =mNavigationArea.findViewById(R.id.home);

      mMenuButton = mNavigationArea.findViewById(R.id.menu);

      mRecentButton = mNavigationArea.findViewById(R.id.recent_apps);

      mRecentButton.setOnClickListener(mOnClickListener);在这里就知道系统做了什么事情了。继续往上看了一下使用到了sb这个View对象原来在这里引用的。

final TabletStatusBarView sb =(TabletStatusBarView)View.inflate(context, R.layout.status_bar, null); TabletStatusBarView.java类是继承FrameLayout,在这里就可以设置它的隐藏或者显示属性了。暂且到这里底层的事件传递虚拟按键的原理后续献上。

本文来自新浪博客