AndroidセットアップシステムSystemUI上部StatusBarステータスバー透明一体化


2つのファイルがあります
gemini_status_bar.xml(この背景を修正して有効)
status_bar.xml
 
システムのデフォルトの黒い状態:android:background="@drawable/system_bar_background"
 
xmlns:android=http://schemas.android.com/apk/res/android
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
    android:id="@+id/status_bar"
    android:background="#00000000"
    android:orientation="vertical"
    android:focusable="true"
    android:descendantFocusability="afterDescendants"
    android:fitsSystemWindows="true"
    >
NavigationBarここを透明に修正
navigation_bar.xml
android/frameworks/base/policy/src/com/android/internal/policy/implPhoneWindowManager.java
/** {@inheritDoc} */
   @Override
   public int getSystemDecorLayerLw() {
             //modify system statusBar transparent lhwstart
             if(mStatusBar != null) return 0;
       //if(mStatusBar != null) return mStatusBar.getSurfaceLayer();
        //modify system statusBar transparent lhw end
       if (mNavigationBar != null) return mNavigationBar.getSurfaceLayer();
       return 0;
}
リファレンスリンク
http://blog.csdn.net/misly_vinky/article/details/12161075
 
このような修正は確かにSystemUI StatusBarを透明にすることができますが、他の白いアプリケーションが開くと、現在のStatusBarが透明で白と混ざって目がくらむという弊害があります.
 
SystemBarTintManager.java
Android 4.4以上のバージョンでは透明度を設定できます
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
            setTranslucentStatus(true);  
            SystemBarTintManager tintManager = new SystemBarTintManager(this);  
            tintManager.setStatusBarTintEnabled(true);  
            tintManager.setStatusBarTintResource(R.color.top_bg_color);//       
        } 
         @TargetApi(19)   
    private void setTranslucentStatus(boolean on) {  
        Window win = getWindow();  
        WindowManager.LayoutParams winParams = win.getAttributes();  
        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;  
        if (on) {  
            winParams.flags |= bits;  
        } else {  
            winParams.flags &= ~bits;  
        }  
        win.setAttributes(winParams);  
    }
        ,    Launcher       ,   ,   Launcher        
           ,    onPause()  ,   Launcher       onRestart()  , /frameworks/base/package/SystemUI/…. PhoneStatusBar.java
//sendBroadcast change systemUI statusbar color start 
           Intent intent=new Intent("change_statusbar_black");
           sendBroadcast(intent);
          
    onPause   statusbar     ,  onRestart        ,              Launcher    ,      gemini_status_bar.xml   
status_bar.xml
の既定の背景色は透明です
  PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
        mBroadcastReceiver.onReceive(mContext,
                new Intent(pm.isScreenOn() ? Intent.ACTION_SCREEN_ON : Intent.ACTION_SCREEN_OFF));
 
        // receive broadcasts
// receive broadcasts
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(ACTION_DEMO);
//add action to change statusbar color start
        filter.addAction("change_statusbar_transparent");
        filter.addAction("change_statusbar_black");
       //add action to change statusbar color end
        context.registerReceiver(mBroadcastReceiver, filter);
 
 
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
 
public void onReceive(Context context, Intent intent) {
            if (DEBUG) Log.v(TAG, "onReceive: " + intent);
            String action = intent.getAction();
            Xlog.d(TAG, "onReceive, action=" + action);
            if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
                 int flags = CommandQueue.FLAG_EXCLUDE_NONE;
                if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
                    String reason = intent.getStringExtra("reason");
                    if (reason != null && reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
                        flags |= CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL;
                    }
                }
                animateCollapsePanels(flags);
            }
 //add onReceive to change statusbar color start 
         else if("change_statusbar_transparent".equals(action)){
                                    Log.e("LHW", "This transparent:");
              mStatusBarView.setBackgroundColor(android.R.color.transparent);
                            
 
                          }    
else if("change_statusbar_black".equals(action)){
                          
                                   Log.e("LHW", "This black:");
 
                   mStatusBarView.setBackgroundColor(android.R.color.black);    
                    
                          }
                          //add onReceive to change statusbar color end