天天看點

通知欄設定系統字型顔色

通知欄設定系統字型顔色

本文的合集已經編著成書,進階Android開發強化實戰,歡迎各位讀友的建議和指導。在京東即可購買:https://item.jd.com/12385680.html

通知欄設定系統字型顔色

Android的Rom版本非常多, 通知欄顔色也各有不同, 如HTC是白底, 紅米Note是暗色透明, 也有其他黑底, 灰底等. 統一設定相同的字型顔色, 必然會導緻顔色沖突. 那麼如何設定字型顔色, 可以正常顯示呢?

HTC(5.0)

, 标題和内容的顔色已經和系統完全相同, 字型大小是适配的.

通知欄設定系統字型顔色

紅米Note

, 标題和内容的顔色統一使用StatusBar字型的顔色.

通知欄設定系統字型顔色

通知的邏輯

RemoteViews views = new RemoteViews(mAppContext.getPackageName(), R.layout.view_notification);
        views.setImageViewResource(R.id.notification_iv_portrait, getSmallIcon());
        views.setTextViewText(R.id.notification_tv_calories, getContentText());
           

1. 版本5.0以下

通知的背景預設系統背景, 字型顔色

@style/TextAppearance.StatusBar.EventContent

.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tool="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="64dp"
    android:gravity="center_vertical">
    ...
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toEndOf="@+id/notification_iv_portrait"
        android:layout_toRightOf="@+id/notification_iv_portrait"
        android:gravity="center_vertical"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/notification_widget_title"
            android:textAppearance="@style/TextAppearance.StatusBar.EventContent"
            android:textSize="@dimen/d14sp"/>

        <TextView
            android:id="@+id/notification_tv_calories"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="@style/TextAppearance.StatusBar.EventContent"
            android:textSize="@dimen/d20sp"
            tool:text="10步 | 20大卡"/>
    </LinearLayout>
</RelativeLayout>
           

TextAppearance.StatusBar.EventContent

, 顧名思義StatusBar的事件内容文本樣式. 在系統中, 會預設比對, 如灰色等.

2. 版本5.0及以上

建立

layout-v21

, 表面5.0版本以後使用.

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tool="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="64dp"
    android:gravity="center_vertical">

    <ImageView
        android:id="@+id/notification_iv_portrait"
        android:layout_width="70dp"
        android:layout_height="64dp"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:scaleType="centerInside"
        tool:src="@drawable/widget_normal"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toRightOf="@+id/notification_iv_portrait"
        android:gravity="center_vertical"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/notification_widget_title"
            android:textAppearance="@android:style/TextAppearance.Material.Notification.Title"
            android:textSize="14sp"/>

        <TextView
            android:id="@+id/notification_tv_calories"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="@android:style/TextAppearance.Material.Notification.Line2"
            android:textSize="20sp"
            tool:text="10步 | 20大卡"/>
    </LinearLayout>
</RelativeLayout>
           

@android:style/TextAppearance.Material.Notification.Title

通知欄标題.

@android:style/TextAppearance.Material.Notification.Line2

通知欄内容.

這樣就可以完全比對系統顔色.

OK, 這個問題已經解決了.

參考