この記事について
環境:MacOS、Android Studio2.1.2
WatchFaceを作成していて、setWatchFaceStyleの設定がいまいちよくわからなかったので、自分のためのメモ程度でまとめてます。
経緯としては、「Android Wear How to make watchface project abc2014W」このスライドシェアの実装方法を自分で調べ直し、新たに分かったことや分かりにくかった箇所をメモにしたような内容です。スライドシェアの方はスクリーンショットが豊富なので、全体的に私の記事より見やすいです。
setWatchFaceStyleについて
公式ドキュメントのリンク
WatchFaceStyle
WatchFaceStyle.Builder
自分好みに設定するとこんな感じになりました。
それぞれの紹介していない引数についての説明は割愛しています。すみません。
public void onCreate(SurfaceHolder holder) {
int gravity = Gravity.TOP| Gravity.CENTER;
setWatchFaceStyle(new WatchFaceStyle.Builder(MyWatchFace.this)
//通知カードの高さを調整。全部表示
.setCardPeekMode(WatchFaceStyle.PEEK_MODE_VARIABLE)
//アンビエントでは通知を非表示
.setAmbientPeekMode(WatchFaceStyle.AMBIENT_PEEK_MODE_HIDDEN)
//通知カードを半透明に
.setPeekOpacityMode(WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT)
//通知カードの背景を表示しない
.setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
//デフォルトのデジタル時計を表示しない
.setShowSystemUiTime(false)
//充電中マークなどのステータスアイコンの表示位置
.setStatusBarGravity(gravity)
//"OK Google"を非表示
.setHideHotwordIndicator(false)
//ステータスアイコンに背景をつける
.setViewProtectionMode(WatchFaceStyle.PROTECT_STATUS_BAR)
.build());
}
参考にしたサイトなど
Android Wear How to make watchface project abc2014W(日本語のSlideShare)
公式ドキュメント(英語)
WatchFaceStyle
WatchFaceStyle.Builder
あとがき
setAmbientPeekMode(WatchFaceStyle.AMBIENT_PEEK_MODE_HIDDEN)
が神。
アンビエントモードで通知カードを非表示にするだけなんですが、アンビエント状態だと他人に見られることもありますし、自分は見てないことが多いはずなので、必須だと思いました。
WatchFaceを作る方は是非これだけでも追加して設定して頂けると私が喜びます。
あとsetWatchFaceStyleとは関係ないんですが、通知カード関連。
「getPeekCardPosition()」で、通知カードの高さなどが取得できるので、
//通知カードの座標分上に表示する。
int yPos = (int)((canvas.getHeight()*0.85) - getPeekCardPosition().height();
こんな感じで、通知カードが表示された時に隠れてしまうような要素を通知カードが出ている時だけ上にずらす事が可能です。
このあたりも考えて実装されてると嬉しいですね。