Androidステータスバー黒フォント

7223 ワード

androidステータスバーstatusbar
[TOC]
前言
会社のプロジェクトのウェルカムページが白いため、ステータスバーの色を変更すると、ステータスバーの白いフォントが完全に上書きされ、QやUCなどのアプリでステータスバーのフォントが濃い色であることを連想し、考えてみると、必ず解決策があります.そこで、本編のblogがありました.
リファレンス
次は私がネットで見つけた2つの文章です.
1.白地に黒!Androidライトステータスバー黒フォントモード
2.Android->浸漬ステータスバーフォント色の修正(小米と魅族のみ)
  • 魅族公式サイトソリューションflyme 4+
  • 小米官网解决方案MIUI 6+
  • ソリューション
    ソースゲート
    MIUI
    public class MIUIHelper implements IHelper {
    
        /**
         *             ,  MIUI6  
         *
         * @param isFontColorDark                   
         * @return boolean       true
         */
        @Override
        public boolean setStatusBarLightMode(Activity activity, boolean isFontColorDark) {
            Window window = activity.getWindow();
            boolean result = false;
            if (window != null) {
                Class clazz = window.getClass();
                try {
                    int darkModeFlag = 0;
                    Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
                    Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
                    darkModeFlag = field.getInt(layoutParams);
                    Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
                    if (isFontColorDark) {
                        extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//          
                    } else {
                        extraFlagField.invoke(window, 0, darkModeFlag);//      
                    }
                    result = true;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
    }
    
    

    flyme4+
    public class FlymeHelper implements IHelper {
    
        /**
         *                     
         *          Flyme  
         *
         * @param isFontColorDark                   
         * @return boolean       true
         */
        @Override
        public boolean setStatusBarLightMode(Activity activity, boolean isFontColorDark) {
            Window window = activity.getWindow();
            boolean result = false;
            if (window != null) {
                try {
                    WindowManager.LayoutParams lp = window.getAttributes();
                    Field darkFlag = WindowManager.LayoutParams.class
                            .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
                    Field meizuFlags = WindowManager.LayoutParams.class
                            .getDeclaredField("meizuFlags");
                    darkFlag.setAccessible(true);
                    meizuFlags.setAccessible(true);
                    int bit = darkFlag.getInt(null);
                    int value = meizuFlags.getInt(lp);
                    if (isFontColorDark) {
                        value |= bit;
                    } else {
                        value &= ~bit;
                    }
                    meizuFlags.setInt(lp, value);
                    window.setAttributes(lp);
                    result = true;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
    }
    

    android6.0+
    1.コード設定
    public class AndroidMHelper implements IHelper {
        /**
         * @return if version is lager than M
         */
        @Override
        public boolean setStatusBarLightMode(Activity activity, boolean isFontColorDark) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (isFontColorDark) {
                    //    
                    //                activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                    //    
                    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                } else {
                    //    
                    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
                }
                return true;
            }
            return false;
        }
    
    }
    
    
    

    2.style属性設定
    
    true
    

    考え方1
    st=>start
    condMIUI=>condition: set MIUI6 success?
    condFlyme=>condition: set flyme4+ success?
    cond6=>condition: set 6.0+ success?
    e=>end
    
    st->condMIUI
    condMIUI(no)->condFlyme
    condFlyme(no)->cond6
    cond6(no)->e
    cond6(yes)->e
    condMIUI(yes)->e
    condFlyme(yes)->e
    

    考え方2
    st=>start
    cond6=>condition: is 6.0+ ?
    condFlyme=>condition: is flyme4+ ?
    condMIUI=>condition: is MIUI6+ ?
    e=>end
    
    st->cond6
    cond6(no)->condMIUI
    condMIUI(no)->condFlyme
    condFlyme(no)->6
    cond6(yes)->e
    condMIUI(yes)->e
    condFlyme(yes)->e
    

    構想の実現
    public class Helper {
        @IntDef({
                OTHER,
                MIUI,
                FLYME,
                ANDROID_M
        })
        @Retention(RetentionPolicy.SOURCE)
        public @interface SystemType {
    
        }
    
        public static final int OTHER = -1;
        public static final int MIUI = 1;
        public static final int FLYME = 2;
        public static final int ANDROID_M = 3;
    
        /**
         *            ,
         *   4.4    MIUIV、Flyme 6.0      Android
         *
         * @return 1:MIUI 2:Flyme 3:android6.0
         */
        public static int statusBarLightMode(Activity activity) {
            @SystemType int result = 0;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                if (new MIUIHelper().setStatusBarLightMode(activity, true)) {
                    result = MIUI;
                } else if (new FlymeHelper().setStatusBarLightMode(activity, true)) {
                    result = FLYME;
                } else if (new AndroidMHelper().setStatusBarLightMode(activity, true)) {
                    result = ANDROID_M;
                }
            }
            return result;
        }
    
        /**
         *        ,           。
         *   4.4    MIUI6、Flyme 6.0      Android
         *
         * @param type 1:MIUI 2:Flyme 3:android6.0
         */
        public static void statusBarLightMode(Activity activity, @SystemType int type) {
            statusBarMode(activity, type, true);
    
        }
    
        /**
         *   MIUI flyme 6.0           
         */
        public static void statusBarDarkMode(Activity activity, @SystemType int type) {
            statusBarMode(activity, type, false);
        }
    
        private static void statusBarMode(Activity activity, @SystemType int type, boolean isFontColorDark) {
            if (type == MIUI) {
                new MIUIHelper().setStatusBarLightMode(activity, isFontColorDark);
            } else if (type == FLYME) {
                new FlymeHelper().setStatusBarLightMode(activity, isFontColorDark);
            } else if (type == ANDROID_M) {
                new AndroidMHelper().setStatusBarLightMode(activity, isFontColorDark);
            }
        }
    
    }
    
    

    結論
    本案はシステムを適切に配置する.
  • android6.0+
  • MIUI6
  • flyme4+

  • 薄い色のステータスバーの濃い色のフォントを合わせると、下のバージョンがAndroid 6であることがわかるそうです.0.1のMIUI 7.1システムはViewをサポートしていません.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR設定は、やはりMIUI独自の濃いフォントの方法で.したがって,ここではまずMIUIとflyme,さらに6.0が適しているが,もちろん,システム名を直接取得することができ,文字列から判断すると,まず6.0がMIUIにあるが,これは頼りにならない.むしろ6のシステムで全構成を統一したほうがいい
    こんなくだらないことをたくさん言ったので,次は本題に入ります.
    福利厚生