如何更改系统通知抽屉的颜色?

时间:2020-01-14 11:42:55

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

我正在开发默认电话应用程序。它提供了呼叫UI。

我的努力:

<?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>

在设备上运行时的外观:

like this

出了什么问题?

显示网络塔楼,电池电量百分比的系统区域(我认为是通知抽屉)由于类似白色,因此完全无法读取,我该如何将其保留为默认值或将其更改为某种适当的颜色,从而使用户能够阅读内容轻松地放在系统抽屉中。

在此先感谢,感谢您的帮助。

编辑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更改此Perticular Styles文件可以通过以下方法解决此问题:

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

现在,该线程很漂亮,有3个答案

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

3 个答案:

答案 0 :(得分:1)

在您的android:statusBarColor v21

中使用Theme
<item name="android:statusBarColor">@android:color/holo_red_light</item>

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

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

如果是这样,请从主题中删除

答案 1 :(得分:1)

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

您只需要:

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

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

例如,您可以引用另一个项目MainActivityMVVMs

希望有帮助。

答案 2 :(得分:0)

在主题v21中使用android:statusBarColor,它将需要Api级别21。

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

您可以使用values-v19中的样式从Api 19起更改颜色。 enter image description here

值-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));

    }