通知とは、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); } }