ヘッドアップ通知

通知とは、Android がアプリ外で表示するメッセージであり、アップデートやリマインダーなどのタイムリーな情報をユーザーに提供します。Android Automotive OS の場合、通知はヘッドアップ通知(HUN)として、または通知パネル内で表示できます(両方も可能)。この記事では、HUN をカスタマイズする方法について説明します。

通知

図 1:通知

下記の設定値をオーバーライドすることにより、HUN の 2 つの要素をカスタマイズできます。

  • 位置
  • アニメーション

HUN をカスタマイズする際は、システムバーの Z オーダーからどのような影響を受けるか必ず確認してください。システムバーの Z オーダーが 10 以上の場合、システムバーは HUN の上に重ねて表示されます。たとえば、HUN が画面の上部に表示され、上部システムバーの Z オーダーが 10 である場合、上部システムバーは HUN の上に重ねて表示されます。ただし、HUN アニメーション ヘルパーをカスタマイズし、上部システムバーの高さを考慮して HUN の最終位置を設定している場合は、その限りではありません

関連ドキュメント

  • リソースをオーバーレイする方法とその理由については、「システム UI のカスタマイズ」のオーバーレイをご覧ください。

  • 通知の詳細については、developer.android.com で Android Automotive OS 上の通知をご覧ください。

config_showHeadsUpNotificationOnBottom

HUN は、設定値 config_showHeadsUpNotificationOnBottom に基づいて画面の上部または下部に表示できます。デフォルトでは false に設定されており、この値では、通知の最終位置は画面の上部に設定されます。

デフォルトの通知

図 2.デフォルトのヘッドアップ通知

config_headsUpNotificationAnimationHelper

画面に通知が表示される方法と、画面から消える方法は数種類あります。デフォルトのアニメーター ヘルパー クラスのセットが用意されています。これをオフに切り替えるには、config_headsUpNotificationAnimationHelper をオーバーライドします。

com.android.car.notification.headsup.animationhelper.CarHeadsUpNotificationTopAnimationHelper

HUN を表示して、アニメーションで初期位置から最終位置まで下に移動させ、次に非表示にします。

上部アニメーション ヘルパー

図 3. 上部アニメーション ヘルパー

com.android.car.notification.headsup.animationhelper.CarHeadsUpNotificationBottomAnimationHelper

HUN を表示して、アニメーションで初期位置から最終位置に移動させ、次に非表示にします。

下部アニメーション ヘルパー

図 4. 下部アニメーション ヘルパー

com.android.car.notification.headsup.animationhelper.CarHeadsUpNotificationRightAnimationHelper

HUN を表示して、アニメーションで初期位置から最終位置まで左に移動させ、次に非表示にします。

右アニメーション ヘルパー 右アニメーション ヘルパー

図 5. 右アニメーション ヘルパー

カスタム アニメーション ヘルパー

追加のカスタマイズが必要な場合は、アニメーター ヘルパークラスをオーバーライドできます。または、次のコード スニペットに示すようにヘルプクラスに HeadsUpNotificationAnimationHelper インターフェースが実装されていれば、カスタム アニメーター ヘルパークラスを使用できます。

[...]

public class SampleAnimationHelper implements
       HeadsUpNotificationAnimationHelper {

   @Override
   public AnimatorSet getAnimateInAnimator(Context context, View view) {
       return (AnimatorSet) AnimatorInflater.loadAnimator(
               context, R.animator.heads_up_notification_transition_in);
   }

   @Override
   public AnimatorSet getAnimateOutAnimator(Context context, View view) {
       return (AnimatorSet) AnimatorInflater.loadAnimator(
               context, R.animator.heads_up_notification_transition_out);
   }

   @Override
   public void resetHUNPosition(View view) {
       view.setY(-1 * view.getHeight());
       view.setAlpha(0);
   }
}