Android没入式ステータスバーまとめ

18149 ワード

参考記事1参考記事2
没入式ステータスバーとは、タイトルバーの色とステータスバーの色を同じ色に設定ことであり、Androidの異なるバージョンでも没入式の設定方法は異なる.
4.4時浸漬式ステータスバーの設定方法
  • コード設定またはトピック設定
  • activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    

    テーマ設定、values-v19フォルダの下
    <style name="MDTheme" parent="Theme.Design.Light.NoActionBar">
        "android:windowTranslucentStatus">true
    style>
    
  • のように設定と、タイトルバーが移動する状態バーと重なる.タイトルバーを下に移動するには、decorViewのレイアウト容器にステータスバーの幅と同じViewを加える、このViewを設置する背景はタイトルバーの色と同じであり、これにより浸漬式のステータスバーを実現することができる.
  • //    
    // 1.    Activity decorView  ,    decorView     View    View,
    ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
    // 2.    View   decorView 
    decorView.addView(myView)
    // 3.          
    // rootView      Activity      View
    ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
    //      childView   padding  ,      View  paddingTop  ,          .
    ViewCompat.setFitsSystemWindows(rootView,true);
    //   childView  padding        .
    rootView.setClipToPadding(true);
    

    以上の2つのステップを経ることで、ステータスバーの背景とタイトルバーの色を一致させることができる.
    5.0での浸透状態バーの設定方法
  • コードで
  • を設定する.
    //           
    getWindow().setStatusBarColor(getResources().getColor(android.R.color.read));
    //                     ,   StatusBarColor       ,         StatusBarColor   
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    //             
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
  • テーマ設定でvalues-v21フォルダの下にテーマ
  • を追加する.
    <style name="MDTheme" parent="Theme.Design.Light.NoActionBar">
        "android:windowTranslucentStatus">false
        "android:windowDrawsSystemBarBackgrounds">true
        "android:statusBarColor">@android:color/read
    style>
    

    6.0での浸透状態バーの設定方法
    6.0浸透式の設定方法と5.0の差は多くない.6..0を少し最適化し、ステータスバーのフォント色とアイコン色を変更することができる.
  • コード方式で
  • を設定する.
    //           
    getWindow().setStatusBarColor(getResources().getColor(android.R.color.read));
    //                     ,   StatusBarColor       ,         StatusBarColor   
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    //             
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //                     
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    
  • テーマ設定でvalues-v23フォルダの下にテーマ
  • を追加する.
    <style name="MDTheme" parent="Theme.Design.Light.NoActionBar">
        "android:windowTranslucentStatus">false
        "android:windowDrawsSystemBarBackgrounds">true
        "android:statusBarColor">@android:color/holo_red_light
        
        "android:windowLightStatusBar">true
    style>
    

    レイアウトをステータスバー領域に延長する方法
  • 4.4時設定方法
  • コード設定
  •    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
  • テーマ設定、values-v19フォルダ下
  •    <style name="MDTheme" parent="Theme.Design.Light.NoActionBar">
           "android:windowTranslucentStatus">true
       style>
    
  • 5.0時設定方法
  •     // 1.        
        getWindow().setStatusBarColor(Color.TRANSPARENT)
        //                     ,   StatusBarColor       .
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        // 2.           ,          
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
        //           
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
  • 6.0時設定方法
  •     // 1.          
        getWindow().setStatusBarColor(Color.TRANSPARENT)
        //                     ,   StatusBarColor       ,         StatusBarColor   
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        // 2. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:           ,          
              View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR:                      
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        //           
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);