我有一个活动,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,不起作用?
由于
答案 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;
}
}