半透明状态栏Android 4.4有一个偏移量

时间:2016-01-14 10:59:22

标签: android

我在Android API等级19上运行此代码

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            final Window window = getWindow();
            window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                    WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}

状态栏是半透明的,但顶部有一个奇怪的偏移。它在android 5上运行完美。

以下是布局的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:orientation="vertical">
    <FrameLayout
        android:id="@+id/statusbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="20dp"
        android:background="?attr/colorPrimary">
        <android.support.v7.widget.Toolbar
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:id="@+id/toolbar"
            app:contentInsetEnd="0dp"
            app:contentInsetStart="0dp" />
    </FrameLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:id="@+id/content_container" />
</LinearLayout>

And here is the screenshot of the view

1 个答案:

答案 0 :(得分:2)

是的,我已经尝试过,但这不起作用。

使用此库: https://github.com/jgilfelt/SystemBarTint

以下是教程:

http://blog.raffaeu.com/archive/2015/04/11/android-and-the-transparent-status-bar.aspx

<强>代码:

SystemBarTintManager tintManager = new SystemBarTintManager(this);
      tintManager.setStatusBarTintEnabled(true);
 tintManager.setNavigationBarTintEnabled(true);
tintManager.setTintColor(Color.parseColor("#20000000"));

您也可以尝试使用以下方法查找状态栏的高度:

// A method to find height of the status bar
public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

我这样做了,而且工作正常:

  

在drawable文件夹中创建 XML 文件(例如:kitkat_status_bar)并将这些代码放在其上:

<?xml version="1.0" encoding="utf-8"?>
<layer-list>
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <solid android:color="@color/ColorPrimary"/>
        </shape>
    </item>
   </layer-list>

然后,您可以将这些代码用于Activity

if (Build.VERSION.SDK_INT < 19) {
            AppUtilsSetting.setTitleBarTint(this);
        }

以下是课程:

public static class AppUtilsSetting {

        public static void setTitleBarTint(Activity ac) {

            ac.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            SystemBarTintManager tintManager = new SystemBarTintManager(ac);
            tintManager.setStatusBarTintEnabled(true);
            tintManager.setStatusBarTintDrawable(ac.getResources().getDrawable(R.drawable.kitkat_status_bar));
        }
    }