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) != 0
                || 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) != 0
                 || 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(1);
+            if (tasksInfo.size() > 0) {  
+                ComponentName topConponent = tasksInfo.get(0).topActivity;
+                if (packageName.equals(topConponent.getPackageName()) && className.equals(topConponent.getClassName())) {  
+                    isBlack = true;
+                }
+            }
             mNavigationLight = mHasLightNavigationBar
                     && (mScrimAlphaBelowThreshold || !mInvertLightNavBarWithScrim)
-                    && !mQsCustomizing;
+                    && !mQsCustomizing 
+                    && !isBlack;
             if (mNavigationLight != last) {
                 updateNavigation();
             }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM