Android 7.0的代码和6.0有很大变化,在导航栏上添加图标修改的文件更多些,
我先列出需要修改的文件:
1,frameworks/base/packages/SystemUI/res/layout/mark.xml
2,frameworks/base/packages/SystemUI/res/drawable-sw600dp/custom_mark.png
3,frameworks/base/packages/SystemUI/res/values-sw600dp/config.xml
4,frameworks/base/SystemUI/res/values-sw600dp/config.xml
5,frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
6,frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
下面一个一个把修改的文件代码列出,首先是mark.xml文件,Andoid 7.0的recent,back,home定义按键都是定义xml文件.我也是按照这三个按键的定义标准来.
2,custom_mark.png就是mark.xml所引用的图片,这个没什么说的,随便找一张图片就行
3,frameworks/base/packages/SystemUI/res/values-sw600dp/config.xml文件
mark;back,home,recent,allapps;space //在这里添加mark
4,frameworks/base/packages/SystemUI/res/values/config.xml文件
mark;back,home,recent,allapps;space //同样添加mark
5,frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java文件
@Nullable
protected View inflateButton(String buttonSpec, ViewGroup parent, boolean landscape,
int indexInParent) {
LayoutInflater inflater = landscape ? mLandscapeInflater : mLayoutInflater;
float size = extractSize(buttonSpec);
String button = extractButton(buttonSpec);
View v = null;
if("mark".equals(button)){ //判断当前的keyguarButton,如果是mark的话,inflate它
v = parent.findViewById(R.id.markTest);
if (null == v) {
isAddToParent = true;
v = inflater.inflate(R.layout.mark, parent, false);
}
changeViewPaddingAndWidth(v,landscape,mIsBookuiMode);
}
6,frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java文件
public ButtonDispatcher getMarkButton() { //定义获取mark的方法
return mButtonDisatchers.get(R.id.markTest);
}
public void setDisabledFlags(int disabledFlags, boolean force) {
if (!force && mDisabledFlags == disabledFlags) return;
mDisabledFlags = disabledFlags;
......
getMarkButton().setVisibility(View.VISIBLE); //在这里设置图标可见
......
}
然后可以单独编译一下SystemUI,就可以看到自己的图标出现到导航栏上了~