Android 定位常見(jiàn)的問(wèn)題

2018-08-02 17:56 更新

編寫(xiě):heray1990 - 原文: http://developer.android.com/training/wearables/watch-faces/issues.html

創(chuàng)建 Android Wear 的客制化表盤(pán)與創(chuàng)建 notification 和可穿戴特有的 activity 的方法不同。這幾課介紹如何解決我們?cè)趯?shí)現(xiàn)第一個(gè)表盤(pán)時(shí)會(huì)遇到的一些問(wèn)題。

檢測(cè)屏幕的形狀

一些 Android Wear 設(shè)備的屏幕是方形的,另一些是圓形的。圓形屏幕的設(shè)備可以在屏幕的底部包含一個(gè)插入部分(或者“下巴”)。我們的表盤(pán)應(yīng)該適應(yīng)和利用好屏幕特定的形狀,如 設(shè)計(jì)指南 中的描述。

Android Wear 讓表盤(pán)在運(yùn)行時(shí)決定屏幕的形狀。為了檢測(cè)屏幕是方形還是圓形,需要像下面的代碼一樣重寫(xiě) CanvasWatchFaceService.Engine 類(lèi)的 onApplyWindowInsets() 方法:

private class Engine extends CanvasWatchFaceService.Engine {
    boolean mIsRound;
    int mChinSize;

    @Override
    public void onApplyWindowInsets(WindowInsets insets) {
        super.onApplyWindowInsets(insets);
        mIsRound = insets.isRound();
        mChinSize = insets.getSystemWindowInsetBottom();
    }
    ...
}

當(dāng)重新繪制表盤(pán)時(shí),檢查成員變量 mIsRound 和 mChinSize 的值來(lái)適應(yīng)我們的設(shè)計(jì)。

容納 Card

當(dāng)用戶接收到一個(gè) notification,notification card 可能會(huì)遮蓋屏幕很大一部分,這取決于系統(tǒng) UI 的風(fēng)格。表盤(pán)應(yīng)該適應(yīng)這些情況,確保當(dāng) notification card 出現(xiàn)時(shí)用戶仍然可以看到時(shí)間。

當(dāng) notification card 出現(xiàn)時(shí),模擬表盤(pán)需要調(diào)整,如縮小表盤(pán)使得自身不被 card 覆蓋。數(shù)字表盤(pán)在屏幕顯示時(shí)間的區(qū)域不會(huì)被 card 覆蓋,通常不需要作出調(diào)整。使用 WatchFaceService.getPeekCardPosition() 方法確定在 card 上方可用于調(diào)整表盤(pán)的空間。

Figure 1. 當(dāng) notification card 出現(xiàn)時(shí),一些模擬表盤(pán)需要調(diào)整

在環(huán)境模式下,card 的背景是透明的。如果我們的表盤(pán)在環(huán)境模式下,card 的附近包含詳細(xì)的信息,那么可以考慮在 card 的上面繪制一個(gè)黑色方塊,確保用戶可以讀到 card 的內(nèi)容。

配置系統(tǒng)指示圖標(biāo)

為了確保系統(tǒng)指示圖標(biāo)一直可見(jiàn),當(dāng)創(chuàng)建一個(gè) WatchFaceStyle 實(shí)例時(shí),我們可以將配置系統(tǒng)指示圖標(biāo)在屏幕的位置和決定是否需要背景保護(hù):

  • 使用 setStatusBarGravity() 方法設(shè)置狀態(tài)欄的位置。
  • 使用 setHotwordIndicatorGravity() 方法設(shè)置熱詞的位置。
  • 使用 setViewProtection() 方法,用一個(gè)灰色的半透明背景保護(hù)狀態(tài)欄和熱詞。由于系統(tǒng)指示圖標(biāo)是白色的,如果我們的表盤(pán)背景是明亮的,這樣做事很必要的。

Figure 2. 狀態(tài)欄

更多關(guān)于系統(tǒng)指示圖標(biāo)的內(nèi)容,請(qǐng)查看配置系統(tǒng) UI 和 設(shè)計(jì)指南。

使用相對(duì)尺寸

不同廠商的 Android Wear 設(shè)備屏幕會(huì)有不同的尺寸和分辨率。我們的表盤(pán)應(yīng)該通過(guò)使用相對(duì)尺寸而不是絕對(duì)像素值來(lái)適應(yīng)這些差異。

當(dāng)我們繪制表盤(pán)時(shí),用 Canvas.getWidth()) 和 Canvas.getHeight()) 方法獲得畫(huà)布的尺寸,然后以屏幕尺寸一部分所占比例的值來(lái)設(shè)置圖片的位置。如果重新繪制表盤(pán)的組件來(lái)響應(yīng) card,那么根據(jù)屏幕里 card 上方剩下空間所占比例的值來(lái)重新繪制表盤(pán)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)