代码之家  ›  专栏  ›  技术社区  ›  M Dapp

Android Wear BoxInsetLayout isRound始终返回false

  •  2
  • M Dapp  · 技术社区  · 10 年前

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

    有人知道是否有一种方法可以通过编程方式判断设备是否是圆形的吗?

    2 回复  |  直到 10 年前
        1
  •  0
  •   Wayne Piekarski    10 年前

    该问题可能是在错误的时间调用isRound()造成的。圆度由传递到BoxInsetLayout的WindowInsets决定。如果在insets交付之前很早就调用isRound(),就会得到错误的答案。

    因此,如果您有一个“box”对象,即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相关的代码发送给我们好吗?

        2
  •  0
  •   Community CDub    5 年前

    根据 韦恩 G+上的答案是一个bug,因为现在我们知道是什么导致了它,如何避免它,但前提是用户意识到了这一点,但它的修复程序还没有发布。

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

    引用文章可能会被删除/更改:

    该问题是由手表在出厂重置后与手机配对时切换语言引发的。您可以通过以下方式避免此问题 在可穿戴设备上选择与您在 电话,以便设备在 配对。

    解决问题的说明:

    1. 工厂重置Moto 360。
    2. 当可穿戴设备重新启动时,它会询问您希望使用哪种语言。选择您在电话中使用的相同语言 (不要选择默认的英语)
    3. 在手机上,启动Android Wear伴侣应用程序,并从溢出菜单中选择“与新的可穿戴设备配对”选项。
    4. 将手机与Moto 360配对。

    编辑: 使用setOnApplyWindowInsetsListener(Wayne建议),我创建了一个小类,可以稍微简化使用。 https://github.com/tajchert/ShapeWear

    只需复制ShapeWear.java类,并订阅屏幕形状检测事件 setOnShapeChangeListener() 或调用方法 ShapeWear.isRound() (如果形状尚未确定,则可能抛出错误)或 ShapeWear. getShape() -这可能导致 ShapeWear.SHAPE_UNSURE 在相同的情况下。