Android Wear BoxInsetLayout isRound始终返回false

时间:2014-09-12 15:45:16

标签: android android-ui wear-os

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

任何人都知道是否有办法以编程方式判断设备是否为圆形?

2 个答案:

答案 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

报价可能会被删除/更改:

  

在出厂重置后与手机配对时,手表切换语言会触发此问题。你可以避免这个问题   在您使用的可穿戴设备上选择相同的语言   电话,以便在设备之后不会发生任何变化   配对。

     

解决问题的说明:

     
      
  1. 恢复出厂设置Moto 360。
  2.   
  3. 当可穿戴设备重新启动时,它会询问您想要使用哪种语言。选择您在手机上使用的语言   (不要选择默认的英语)
  4.   
  5. 在手机上,启动Android Wear随播广告应用,然后从溢出菜单中选择选项"与新的可穿戴设备配对"。
  6.   
  7. 将手机与Moto 360配对。
  8.   

编辑: 使用setOnApplyWindowInsetsListener(由Wayne建议)我创建了一个简化使用它的小类。 https://github.com/tajchert/ShapeWear

只需复制ShapeWear.java类,订阅屏幕形状检测事件setOnShapeChangeListener()或调用方法ShapeWear.isRound()(可以抛出错误,形状尚未确定)或ShapeWear. getShape() - 哪个可以导致ShapeWear.SHAPE_UNSURE处于同样的情况。