android frameworks开发SystemUI之NavigationBar改变

如果对于android SystemUI还不够了解,

请查阅我的android SystemUI全解析

此处默认大家对于SysytemUI有足够的认知

如果想对系统NavigationBar做出改变(视需求而定)
此处我将介绍几种改变NavigationBar的方法

一、改变大小(高度)

通过
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.j
ava
 public void setInitialDisplaySize(Display display, int width, int height, int density) {
.......}



通过这个函数setInitialDisplaySize(Display display, int width, int height, int density),
我们可以发现android手机或者平板Display=FULLSCREEN-NavigationBar-StatusBar


// Width of the navigation bar when presented vertically along one side
mNavigationBarWidthForRotation[mPortraitRotation] =
 mNavigationBarWidthForRotation[mUpsideDownRotation] =
mNavigationBarWidthForRotation[mLandscapeRotation] =
mNavigationBarWidthForRotation[mSeascapeRotation] =
               mContext.getResources().getDimensionPixelSize(
                          com.android.internal.R.dimen.navigation_bar_width);
// SystemUI (status bar) layout policy
int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / density;


这里我们不难发现NavigationBarWidth取决于com.android.internal.R.dimen.navigation_bar_width

那么我们改变frameworks\base\core\res\res\values\dimens.xml
 
  25dip 
-  
  48dp 
-  
  48dp 
-  
  42dp 
-  
  24dip 




改变值为
300dp

编译焼铸开机后  将会发现我们的手机或者平板将会出现巨大的惊喜
同理,如果我们将高度设为0,则可想而知出现的会是什么样子(不建议这样改动)

此时,如果我们不仅仅是单纯的想要改动NavigationBar的大小
比如,我们想要改动它的外观,此时我们应该怎么办呢
通过 

Android Frameworks层开发之SystemUI分析

我们知道mNavigationBar已经创建(mNavigationBarView = 
(NavigationBarView) View.inflate(context, R.layout.navigation_bar, null);)
根据布局我们可以知道NavigationBar的样式(这里我们不贴出系统xml文件)
我们知悉NavigationBar源码位置 
\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\NavigationBarView
相应的布局文件\frameworks\base\packages\SystemUI\res\layout\navigation_bar.xml
此时 如果我们隐藏系统NavigationBar.xml里面的控件,并将其改成自己的控件

你可能感兴趣的:(android frameworks开发SystemUI之NavigationBar改变)