【问题标题】:How to change the color of system notification drawer?如何更改系统通知抽屉的颜色?
【发布时间】:2020-05-01 03:19:32
【问题描述】:

我正在开发默认手机应用程序。它提供通话界面。

我的努力:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e91e63"
tools:context=".CallActivity">


<TextView
    android:id="@+id/NumberField"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:text="@string/CallerPhoneString"
    android:textSize="30sp"
    android:textStyle="bold"
    android:layout_marginBottom="5dp"
    android:gravity="center_horizontal"/>

<TextView
    android:id="@+id/CallTime"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/NumberField"
    android:text="@string/CallingTypeString"
    android:textSize="30sp"
    android:gravity="center_horizontal"/>

<LinearLayout
    android:id="@+id/layout_functions"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="bottom"
    android:layout_marginBottom="4dp" >

    <LinearLayout
        android:id="@+id/hold_join_speaker"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        android:baselineAligned="false"
        android:layout_marginBottom="25dp" >

        <LinearLayout
            android:id="@+id/hold_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1">

            <Button
                android:id="@+id/hold_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:background="@drawable/not_on_hold"
                android:layout_gravity="center" />

            <TextView
                android:id="@+id/hold_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/hold_text_string"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:textColor="@android:color/black"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/join_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1">

            <Button
                android:id="@+id/reject_text_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:background="@drawable/join_calls"
                android:layout_gravity="center" />

            <TextView
                android:id="@+id/reject_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/join_text_string"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:textColor="@android:color/black"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/speaker_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1">

            <Button
                android:id="@+id/speaker_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:background="@drawable/speaker_off"
                android:layout_gravity="center" />

            <TextView
                android:id="@+id/speaker_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/speaker_text_string"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:textColor="@android:color/black"/>
        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/mute_sms_record"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        android:baselineAligned="false"
        android:layout_marginBottom="70dp" >

        <LinearLayout
            android:id="@+id/mute_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1">

            <Button
                android:id="@+id/mute_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:background="@drawable/mic_on"
                android:layout_gravity="center" />

            <TextView
                android:id="@+id/mute_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/mute_text_string"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:textColor="@android:color/black"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/sms_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1">

            <Button
                android:id="@+id/sms_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:background="@drawable/in_call_sms"
                android:layout_gravity="center" />

            <TextView
                android:id="@+id/sms_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/sms_text_string"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:textColor="@android:color/black"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/record_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_weight="1">

            <Button
                android:id="@+id/record_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:background="@drawable/in_call_record"
                android:layout_gravity="center" />

            <TextView
                android:id="@+id/record_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/record_text_string"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:textColor="@android:color/black"/>
        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/ActionLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        android:layout_marginBottom="10dp" >

        <com.ncorti.slidetoact.SlideToActView
            android:id="@+id/slideToAnswer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:layout_marginBottom="10dp"
            android:elevation="8dp"
            app:area_margin="8dp"
            app:text="Slide to answer"
            app:text_color="@color/colorWhite"
            app:text_size="20sp"
            app:text_style="bold"
            app:slider_height="90dp" />

        <Button
            android:id="@+id/btn_End_Call"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:background="@drawable/disconnect"
            android:layout_gravity="center"
            android:visibility="gone" />



    </LinearLayout>

</LinearLayout>

在设备上运行时的外观:

有什么问题?

由于类似白色的颜色,显示网络塔,电池百分比的系统区域(我认为通知抽屉)完全不可读,我如何保持默认或将其更改为某种适当的颜色,以使用户能够阅读内容轻松放入系统抽屉中。

提前致谢,任何帮助都将不胜感激。

编辑 2:(按需)

使用的主题是 - AppTheme.NoActionBar

这是清单中提到的主题:

<activity
        android:name=".CallActivity"
        android:autoRemoveFromRecents="true"
        android:label="@string/title_activity_call"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter android:priority="800">
            <action android:name="android.intent.action.ACTION_CALL" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

还有我的 Theme Styles.xml:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- 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.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" 
parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" 
parent="ThemeOverlay.AppCompat.Light" />

</resources>

谢谢。

编辑 3:(尝试了建议):

我将样式编辑为:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- 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.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:statusBarColor">@color/colorBlue</item>
</style>

<style name="AppTheme.AppBarOverlay" 
parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" 
parent="ThemeOverlay.AppCompat.Light" />

</resources>
  1. 将属性android:statusBarColor 添加到绿色
  2. 保存并在设备上运行它,但不起作用。
  3. 缓存无效并重新启动 Android Studio
  4. 从 build.gradle 更新了 App 版本,以便设备将寻找新的更改,而不是使用以前版本中的缓存
  5. 状态栏的颜色仍未更改为蓝色

编辑:4(我还尝试了什么)

它通过

以编程方式更改颜色
this.getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.colorBlue));

我仍然在寻找明智的改变它的风格。

编辑 5:(成功时)

v21/Styles.xml 具有创建问题的默认颜色。正如@Md 所建议和回答的那样。 Asaduzzaman 更改此特定样式文件通过以下方式解决了问题:

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

现在这个帖子很漂亮,有 3 个答案

  1. 通过活动以编程方式进行
  2. 通过更改 v21 以上和 v21 的样式
  3. 也可以使用BarUtils

【问题讨论】:

  • 您可以添加您在activity 上应用的Theme 吗?
  • 如果 api 级别 21 及以上,您可以使用&lt;item name="android:statusBarColor"&gt;@android:color/holo_red_light&lt;/item&gt;
  • 您的设备 API 级别是多少?
  • 否,您测试应用的设备的 API 级别。
  • 检查v21,可能你在那里用过transparentcolor

标签: android xml android-layout colors background-color


【解决方案1】:

在您的Theme 中使用android:statusBarColor v21

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

您可能在其中一个主题变体中使用过android:color/transparent,例如:

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

如果是这样,请将其从您的主题中删除

【讨论】:

  • 目标 API 29
  • 它确实帮助了赞赏和接受,因为回答过程为未来的访问者提供了 3 个可用的答案。很棒
【解决方案2】:

如何使用我的开源android utils库Android-utilsBarUtils

你只需要:

  1. 调用BarUtils#setStatusBarColor()设置状态栏颜色;
  2. 然后调用BarUtils.addMarginTopEqualStatusBarHeight(/*root view of your layout*/) 或在布局中使用fitsystemwindow 属性。

这将首先使用透明状态栏,然后添加一个具有您设置为状态栏的给定颜色的假视图。

示例可以参考我另一个项目MVVMsMainActivity

希望对你有帮助。

【讨论】:

  • 但我的解决方案只要高于 KITKAT 就没有 API 限制。 @RushikantPawar
  • 确实如此。你的回答也很有帮助。但处理根本原因总是更好,原因是 Styles (v21) 文件。您的回答将来也会有所帮助。感谢您和 Upvote 的真诚帮助
【解决方案3】:

在您的 Theme v21 中使用 android:statusBarColor 它将需要 Api 级别 21。

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

您可以使用 values-v19 中的样式从 Api 19 开始更改颜色。

values-v19 中的样式:

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

    //transparent status bar
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowTranslucentStatus">true</item>


</style>

这将使状态栏透明,您可以设置背景以更改状态栏颜色。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

                     window.setStatusBarColor(getResources().getColor(R.color.statusBarColor));

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2020-04-16
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多