Android - 如何在早期版本(低于Android 5.0)的设备上通过编程方式更改状态栏颜色

5

我希望能够通过编程在早期的Android设备上更改状态栏颜色。我很清楚,在早期版本的Android中,由于状态栏颜色是操作系统本身关注的问题,因此Material Design的colouPrimaryDark无法起作用。因此,我想通过Java文件以编程方式实现它。这是否可能?

目前,我正在使用这个Material Design代码。

<resources>

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

由于这个方案无法在21以下的API中使用,因此我想通过Java来实现。


我认为那是不可能的。 - camelCaseCoder
可能市场上有许多应用程序可以做到这一点,比如 WhatsApp。 - user5807648
3
@Yash Singh:我使用的是早期版本的设备,WhatsApp 的状态栏颜色是黑色。 - kevz
请查看此答案 https://dev59.com/x2Eh5IYBdhLWcg3wpEtF#26215844 - Jayanth
谢谢大家,也许我错了,在Lollipop之前是不可能的。 - user5807648
2个回答

1

实际上,我们可以在KitKat上使用它。

查看此链接:http://developer.android.com/reference/android/R.attr.html#windowTranslucentStatus

只需将此内容添加到您的布局顶部即可:

<FrameLayout
        android:id="@+id/statusbar"
        android:layout_width="match_parent"
        android:layout_height="25dp"
        android:background="@color/colorPrimaryDark" />

And use this:

if(Build.VERSION.SDK_INT == 19) {

            FrameLayout statusbar = (FrameLayout) findViewById(R.id.statusbar);
            statusbar.setVisibility(View.GONE);
        }

它应该可以在Kitkat上运行,就像我说的那样,这也仅适用于Kitkat以上版本。


在Marshmallow上是24dp。 - Eugen Pechanec
1
它适用于API 17。但是我们无法使用“向下滚动以查看通知”,就像一般的状态栏一样。我还使用了activity.requestWindowFeature(Window.FEATURE_NO_TITLE); activity.getWindow()。setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); - ashishdhiman2007

0

简单来说,操作系统本身无法管理这些事情。在Lollipop版本之前的Android系统中,没有权限更改状态栏颜色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接