1. 程式人生 > >通知欄設定系統字型顏色

通知欄設定系統字型顏色

HTC5.0

Book

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

HTC(5.0), 標題和內容的顏色已經和系統完全相同, 字型大小是適配的.

HTC5.0

紅米Note, 標題和內容的顏色統一使用StatusBar字型的顏色.

紅米Note

通知的邏輯

        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, 這個問題已經解決了.

參考