我正在构建Android Wear应用并试图为圆形屏幕实现BoxInsetLayout。在我的代码中,我想检测设备是否是圆形的,所以我使用BoxInsetLayout的isRound()函数,但它总是返回false,即使在Moto 360上也是如此。
任何人都知道是否有办法以编程方式判断设备是否为圆形?
答案 0 :(得分:0)
问题可能是在错误的时间调用isRound()引起的。圆度由传递给BoxInsetLayout的WindowInsets确定。如果你在插件发布之前很早就调用isRound(),你就会得到错误的答案。
所以如果你有一个"框"对象是BoxInsetLayout,你会这样做:
box.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
// Need to also call the original insets since we have overridden the original
// https://developer.android.com/reference/android/view/View.OnApplyWindowInsetsListener.html
box.onApplyWindowInsets(windowInsets);
// You can make calls to detect isRound() here!
// Return the insets so the BoxInsetLayout still works properly
return windowInsets;
}
});
您能否将与您正在使用的BoxInsetLayout相关的代码发送给我们?
答案 1 :(得分:0)
根据 Wayne 回答G +这是一个错误,现在我们知道是什么导致了它,如何避免它,但只有当用户意识到这一点,但修复它没有被释放(尚未)。
https://plus.google.com/108847189842978537754/posts/5YiYb14i7ss
报价可能会被删除/更改:
在出厂重置后与手机配对时,手表切换语言会触发此问题。你可以避免这个问题 在您使用的可穿戴设备上选择相同的语言 电话,以便在设备之后不会发生任何变化 配对。
解决问题的说明:
- 恢复出厂设置Moto 360。
- 当可穿戴设备重新启动时,它会询问您想要使用哪种语言。选择您在手机上使用的语言 (不要选择默认的英语)
- 在手机上,启动Android Wear随播广告应用,然后从溢出菜单中选择选项"与新的可穿戴设备配对"。
- 将手机与Moto 360配对。
醇>
编辑: 使用setOnApplyWindowInsetsListener(由Wayne建议)我创建了一个简化使用它的小类。 https://github.com/tajchert/ShapeWear
只需复制ShapeWear.java类,订阅屏幕形状检测事件setOnShapeChangeListener()
或调用方法ShapeWear.isRound()
(可以抛出错误,形状尚未确定)或ShapeWear. getShape()
- 哪个可以导致ShapeWear.SHAPE_UNSURE
处于同样的情况。