Как изменить цвет ящика системных уведомлений? - PullRequest
0 голосов
/ 14 января 2020

Я занимаюсь разработкой приложения для телефона по умолчанию. Это обеспечивает в интерфейсе вызова.

Мои усилия:

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

и мои стили тем. 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, так что устройство будет искать новые изменения вместо использования кэшей в предыдущей версии
  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 тоже

Ответы [ 3 ]

1 голос
/ 14 января 2020

Как насчет использования BarUtils моего открытого источника android библиотека утилит Android -utils .

Вам нужно только:

  1. позвонить BarUtils#setStatusBarColor(), чтобы установить цвет строки состояния;
  2. , затем вызвать BarUtils.addMarginTopEqualStatusBarHeight(/*root view of your layout*/) или использовать свойство fitsystemwindow в макете ,

Сначала будет использоваться прозрачная строка состояния, а затем добавлено поддельное представление с заданным цветом, заданным в качестве строки состояния.

Для примера вы можете сослаться на MainActivity моего другого проекта MVVMs .

Надеюсь, это поможет.

1 голос
/ 14 января 2020

Используйте android:statusBarColor в вашем Theme v21

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

Возможно, вы использовали android:color/transparent в одном из вариантов вашей темы, например:

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

Если это так, Удалите это из вашей темы.

0 голосов
/ 14 января 2020

Использование android: statusBarColor в вашей теме v21 потребует уровень API 21.

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

Вы можете изменить цвет с Api 19 и далее, используя стиль в values-v19. 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));

    }
...