Android Wear,Watchface类型检测 - 圆形或方形

时间:2014-10-04 14:14:16

标签: android wear-os

我有一个活动,ExampleActivity

    <activity android:name="com.android.ExampleActivity"
        android:label="@string/app_name"
        android:allowEmbedded="true">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>

通过最明确的定义,可以毫无问题地检测圆形布局。

但是由于SAME活动这个最明显,SAME代码不起作用。

    <activity android:name="com.android.ExampleActivity"
        android:label="@string/app_name"
        android:allowEmbedded="true">

        <meta-data android:name="com.google.android.clockwork.home.preview" android:resource="@drawable/example_watch_background" />

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="com.google.android.clockwork.home.category.HOME_BACKGROUND" />
        </intent-filter>

    </activity>

对于检测圆形布局,moto 360设备,使用onApplyWindowInsets或onReadyForContent,但同样的问题。

任何想法,因为当我使用此类别时,com.google.android.clockwork.home.category.HOME_BACKGROUND,不起作用?

由于

2 个答案:

答案 0 :(得分:1)

使用新的SDK,您需要按照Android Wear for Developers

上的显示进行操作
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();
    }
    ...
}

在这里,正如您所看到的,您可能还会获得底部屏幕间隙的值(例如Moto 360)。

答案 1 :(得分:-1)

在新的andrioid smartwatch SDK发布之前,您不能在自定义监视面上使用setOnApplyWindowInsetsListener / onApplyWindowInsets。此功能仅适用于smartwatch应用程序(无需添加清单)。

要知道钟面是否为圆形,您可以使用:

public static boolean heightSameAsWidth(Context context) {
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();

    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);

    int width = metrics.widthPixels;
    int height = metrics.heightPixels;

    return height == width;
}

private void checkIfWatchIsRound() {
    if (heightSameAsWidth(getApplicationContext())) {
        isRound = false;
    } else {
        isRound = true;
    }
}