
正文
Android 8.0 NavigationBar 颜色问题。
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
1.
packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
public void onNavigationVisibilityChanged(int vis, int mask, boolean nbModeChanged,
int navigationBarMode) {
int oldVis = mSystemUiVisibility;
int newVis = (oldVis & ~mask) | (vis & mask);
int diffVis = newVis ^ oldVis;
if ((diffVis & View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR) !=
|| nbModeChanged) {
boolean last = mNavigationLight;
mHasLightNavigationBar = isLight(vis, navigationBarMode,
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
mNavigationLight = mHasLightNavigationBar
&& (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim)
&& !mQsCustomizing;
if (mNavigationLight != last) {
updateNavigation();
}
}
mSystemUiVisibility = newVis;
mLastNavigationBarMode = navigationBarMode;
}
其中决定了背景色是否为亮色或者为暗色,通过此处的设置系统回去自动的决定icon的颜色。
bug原因:
a. app 设置了View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR 属性,导致系统把背景色的标志为了亮色,但此处的设置并不本质决定背景色。由于标志为了亮色所以图标icon为黑色。
b. 没有实际修改背景色,还是使用的是系统主题里面的颜色,黑色。
所以看不到图表了,本身是app的问题呢。
2.在不修改app 的前提下的修改测试方法。
a.为单独的app重新设置一遍。
int oldVis = mSystemUiVisibility;
int newVis = (oldVis & ~mask) | (vis & mask);
int diffVis = newVis ^ oldVis;
+ boolean isBlack = false;
if ((diffVis & View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR) !=
|| nbModeChanged) {
boolean last = mNavigationLight;
mHasLightNavigationBar = isLight(vis, navigationBarMode,
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
+ String packageName = "xxxx";
+ String className = "xxxxxxxxxx";
+ ActivityManager activityManager = (ActivityManager) mContext.getSystemService(mContext.ACTIVITY_SERVICE);
+ List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks();
+ if (tasksInfo.size() > ) {
+ ComponentName topConponent = tasksInfo.get().topActivity;
+ if (packageName.equals(topConponent.getPackageName()) && className.equals(topConponent.getClassName())) {
+ isBlack = true;
+ }
+ }
mNavigationLight = mHasLightNavigationBar
&& (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim)
- && !mQsCustomizing;
+ && !mQsCustomizing
+ && !isBlack;
if (mNavigationLight != last) {
updateNavigation();
}







