搜尋

首頁  >  問答  >  主體

让Android 5.0, 4.4 系统都实现沉淀式状态栏或透明状态栏的方法

我想在5.0 或者4.4 操作系统都实现沉淀式状态栏或透明状态栏,最好全部都采用style 的方式实现,最好不用这个开源库https://github.com/jgilfelt/SystemBarTint求解决思路

经过这几天的思考和研究,发现使用ActionBar,和不使用ActionBar,改为Toolbar 效果完全是不一样的,那在这两种情况下是否都可以完美的实现呢

高洛峰高洛峰2773 天前668

全部回覆(3)我來回復

  • PHPz

    PHPz2017-04-17 15:28:15

    對於top view, 可以用style,

    <style name="TopViewStyle">
        <item name="android:fitsSystemWindows">true</item>
        <item name="android:clipToPadding">true</item>
    </style>
    

    但window flag還是需要程式碼做版本支援判斷的,

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    

    是沒法在style中表示的,style自己做不了版本標識區別。

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/top_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@style/TopViewStyle"/>
        <TextView
            android:id="@+id/example_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    

    MainActivity.java

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
        }
    
    }
    

    回覆
    0
  • 阿神

    阿神2017-04-17 15:28:15

    自己的解決方案:https://coding.net/u/tianshaokai/p/MaterialDesignDemo/git
    低版實現Material Design 的兩種方式
    https://github.com/Witype/ SystemBarTintDemo
    https://github.com/Witype/ToolbarStatusDemo

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:28:15

    實現狀態列沉浸非常簡單,而且只需要透過style配置
    values-v19 下的 styles.xml 裡定義如下主題,並在 Manifest.xml 裡將應用主題確定為這個主題即可。

    <style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">false</item>
    </style>
    

    android:windowTranslucentStatus 表示狀態列透明
    android:windowTranslucentNavigation 表示導覽列(虛擬按鍵列)透明

    沉浸是小事,關鍵麻煩在對 layout 佈局裡的改動,fitsSystemWindows 的優化,
    憑經驗告訴你,SystemBarTint已經算是最簡單的解決方案。

    回覆
    0
  • 取消回覆