Notification表示するならNotification.builderのが楽っぽい

androidのNotificationで引っ張った時に見えるやつをカスタマイズする方法

xmlを作る

カスタマイズしたいレイアウトのxmlを作成する

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ffffff"
    android:padding="5dp" >

    <ImageView
        android:id="@+id/imgIcon"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginRight="10dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/txtTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:layout_marginBottom="5dp"
            style="@android:style/TextAppearance.Medium" />
    
        <ProgressBar
            android:id="@+id/pgsDownload"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

</LinearLayout>

設定

これをNotificationに設定すればうまく動く

	Notification notification = new Notification();
	notification.contentView = new RemoteViews(getPackageName(), R.layout.notice_download_progress);

	NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
	notificationManager.notify(NOTIFICATION_ID, Notification);

注意

これ以下の条件で、背景色が勝手に設定されるらしい

  • setContentでRemoteViewsをセット
  • PackageのtargetSdkVersionが”9″未満の場合

詳しくはこちらを。

まとめ

と、ここまで作っておきながらもNotificationに関してはNotification.builderを使ったほうが簡単で綺麗にできそう。Notificationってアプリ内に完結していないんで端末として統一されたものが表示されないと汚く見えてしまう。なので、カスタマイズせずにNotification.builder使って作ったほうが良さげ。

Notification.builderの使い方

ここまで書いたし、Notification.builderを使う場合のやりかた。

	Notification.Builder builder = new Notification.Builder(getApplicationContext());
	builder.setTicker("ticker");
	builder.setContentTitle("title");
	builder.setContentText("text");
	builder.setSmallIcon(android.R.drawable.ic_dialog_info);
	Notification notification = builder.getNotification();

	NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
	manager.notify(0, notification);

随分簡単。綺麗だしいいと思う。ただ、API Level 11以上必要ってのはハードルが高いよなぁ。API Level 11未満の場合は以下のリンクを参考にやりましょ。