2014-09-12 46 views
2

我正在构建一个Android Wear应用程序并试图为圆形屏幕实现BoxInsetLayout。在我的代码中,我想检测设备是否为圆形,所以我使用BoxInsetLayout的isRound()函数,但即使在Moto 360上它也总是返回false。Android Wear BoxInsetLayout isRound总是返回false

任何人都知道是否有办法以编程方式确定设备是否是圆形的?

+1

你使用'layout_box'属性吗? – 2014-09-12 16:25:02

+0

是的,但isRound()的返回值有什么影响? – Dapp 2014-09-15 13:32:26

+0

你能复制粘贴你的清单吗? – 2014-09-18 22:45:57

回答

0

该问题可能是由于在错误的时间调用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的代码?

0

根据Wayne在G +上的答案是一个错误,现在我们知道是什么原因造成的,如何避免它,但只有当用户知道这一点,但修复它不释放(还)。

https://plus.google.com/108847189842978537754/posts/5YiYb14i7ss

引用作为后可能会被删除/修改:

问题是由表出厂重置后与手机配对时切换语言触发。您可以避免 在可穿戴设备上使用与您在 手机上使用的相同语言的问题,以便在设备配对时设备 未发生变化。

说明来解决这个问题:

  1. 恢复出厂设置摩托360
  2. 当可穿戴重新启动时,它会问你想用什么语言。选择您在手机上使用的语言 (不要选择默认的英语)
  3. 在手机上,启动Android Wear伴侣应用程序,然后从溢出菜单中选择选项“与新的可穿戴设备配对” 。
  4. 对手机与摩托360

编辑: 使用setOnApplyWindowInsetsListener(由韦恩建议)我创建小班使用它一下,简化。 https://github.com/tajchert/ShapeWear

只需复制ShapeWear.java类和订阅筛选形状检测事件setOnShapeChangeListener()或调用方法ShapeWear.isRound()(可以抛出错误形状尚未确定)或ShapeWear. getShape() - 这可能会导致在同样的情况ShapeWear.SHAPE_UNSURE