Android修改StatusBar颜色

标签 android xml

我建立了一个项目并希望使用 Material Design。由于该应用程序应与低于 21 的 API 兼容,因此我使用了 appcompat。 很遗憾,我无法更改状态栏的颜色。

我已经阅读:How to change the status bar color in android 并且:https://chris.banes.me/2014/10/17/appcompat-v21/

我的布局是 android.support.v4.widget.DrawerLayout。 ActionBar 的颜色发生变化,但状态栏的颜色不变。我的 XML:

<resources>

<!--
    Base application theme, dependent on API level. This theme is replaced
    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.


-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.


    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">

    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/green500</item>
    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/green900</item>
</style>

最佳答案

实际上,低于API 19的应用程序无法更改状态栏颜色。

我写了一个演示。当 API 级别高于或等于 API 19 时,它工作正常。 你的风格设置是正确的。但是,如果您希望该应用与 API 19 兼容。 您应该添加一些代码。

class Utils {
private static int getStatusBarHeight(Context context) {
    Context appContext = context.getApplicationContext();
    int result = 0;
    int resourceId = appContext.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = appContext.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

static void setStatusbarColor(Activity activity, View view) {
    Window w = activity.getWindow();
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
        w.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        w.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        int statusBarHeight = getStatusBarHeight(activity);
        view.setLayoutParams(new CoordinatorLayout.LayoutParams(CoordinatorLayout.LayoutParams.MATCH_PARENT
                , view.getLayoutParams().height + statusBarHeight));
        view.setPadding(0, statusBarHeight, 0, 0);
    }
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    Utils.setStatusbarColor(this, toolbar);
    setSupportActionBar(toolbar);
}

如果你想检查所有代码。请到这里:https://github.com/SawDouma/StatusBarColorChanged/tree/master

关于Android修改StatusBar颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27144780/

相关文章:

android - 无法调用 determinedVisibility() - 从未看到 pid 的连接 - 无法导航到 Html 页面

android - 具有水平可滚动行的垂直滚动列表的回收器 View

Android Share Preferences 与 Intent extra 以共享数据

html - 缩进 vim HTML 中的所有标签

php - 将 xml feed 写入数据库,如何安全删除旧记录并更新新记录?

android - Apple/Android 第三方商家服务

android - HttpURLConnection 在 monodroid 上返回 302 错误

xml - 通过电子邮件发送 svn 的每日提交报告

java - Android布局优先级?

c# - 解析XML转sql参数,datetime2和bit问题