我正在构建一个Android Wear应用程序并试图为圆形屏幕实现BoxInsetLayout。在我的代码中,我想检测设备是否为圆形,所以我使用BoxInsetLayout的isRound()函数,但即使在Moto 360上它也总是返回false。Android Wear BoxInsetLayout isRound总是返回false
任何人都知道是否有办法以编程方式确定设备是否是圆形的?
我正在构建一个Android Wear应用程序并试图为圆形屏幕实现BoxInsetLayout。在我的代码中,我想检测设备是否为圆形,所以我使用BoxInsetLayout的isRound()函数,但即使在Moto 360上它也总是返回false。Android Wear BoxInsetLayout isRound总是返回false
任何人都知道是否有办法以编程方式确定设备是否是圆形的?
该问题可能是由于在错误的时间调用isRound()造成的。 RoundInsets由传递给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的代码?
根据Wayne在G +上的答案是一个错误,现在我们知道是什么原因造成的,如何避免它,但只有当用户知道这一点,但修复它不释放(还)。
https://plus.google.com/108847189842978537754/posts/5YiYb14i7ss
引用作为后可能会被删除/修改:
问题是由表出厂重置后与手机配对时切换语言触发。您可以避免 在可穿戴设备上使用与您在 手机上使用的相同语言的问题,以便在设备配对时设备 未发生变化。
说明来解决这个问题:
- 恢复出厂设置摩托360
- 当可穿戴重新启动时,它会问你想用什么语言。选择您在手机上使用的语言 (不要选择默认的英语)
- 在手机上,启动Android Wear伴侣应用程序,然后从溢出菜单中选择选项“与新的可穿戴设备配对” 。
- 对手机与摩托360
编辑: 使用setOnApplyWindowInsetsListener(由韦恩建议)我创建小班使用它一下,简化。 https://github.com/tajchert/ShapeWear
只需复制ShapeWear.java类和订阅筛选形状检测事件setOnShapeChangeListener()
或调用方法ShapeWear.isRound()
(可以抛出错误形状尚未确定)或ShapeWear. getShape()
- 这可能会导致在同样的情况ShapeWear.SHAPE_UNSURE
。
你使用'layout_box'属性吗? – 2014-09-12 16:25:02
是的,但isRound()的返回值有什么影响? – Dapp 2014-09-15 13:32:26
你能复制粘贴你的清单吗? – 2014-09-18 22:45:57