如何使状态栏透明,如图所示

时间:2018-01-10 17:59:44

标签: android

我想让我的图片填满状态栏并使其透明,如下图所示。我遵循了不同的类似问题,但无法获得所需的效果。

我使用了以下风格。

const done = (err, res) => callback(null, {
    statusCode: err ? '400' : '200',
    body: err ? err.message :  res.Body.toString('utf-8'), // <<-- this line 
    headers: {
        'Content-Type': 'application/json',
        'Charset': 'utf-8',
        "'Access-Control-Allow-Methods": "GET, POST, OPTIONS"
    },
});

我也尝试过添加此代码。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>

        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowTranslucentStatus">true</item>
    </style>

I want to create effect like this.

This is what I am getting now

我需要什么才能获得理想的效果?

3 个答案:

答案 0 :(得分:1)

将这些添加到您的主题样式:

<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowTranslucentStatus">true</item>

并且在您希望状态栏为透明的任何活动中,将其添加到父布局:

android:fitsSystemWindows="true"

也适用于棒棒糖+将这些标志添加到窗口:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

答案 1 :(得分:1)

您正在寻找的行为仅适用于某些Android API版本。从API 19开始,您的应用可以拥有半透明状态栏并在其后面绘制。从API 21开始,您的应用可以拥有透明状态栏并在其后面绘制。为了在所有API级别上成功获得最佳结果,您将不得不做一些工作。您需要在AppThemevalues/values-v19/中创建values-v21/样式,并且您需要在所有三个位置都拥有所有基础知识。< / p>

在您的基础values/样式中,输入:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

values-v19/样式中,请输入:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

    <item name="android:windowTranslucentStatus">true</item>
</style>

values-v21/样式中,请输入:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

然后,要支持Lollipop +中的透明状态栏,请将其添加到您的活动onCreate()

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

答案 2 :(得分:0)

将此代码放在您活动的oncreate方法

 if (GeneralFunctions.isAboveLollipopDevice()) {
        Window window = getWindow();
            window.setStatusBarColor(ContextCompat.getColor(this, R.color.colorTransparent));
            window.getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        }

这必须是你的样式文件

<style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme" parent="BaseAppTheme" />

并将其添加到您的values-v21-&gt; style.xml中

<resources>
<style name="AppTheme" parent="BaseAppTheme">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@color/colorTransparent</item>
</style>
</resources>