【问题标题】:Detect Moto 360/circlular shape and onApplyWindowInsetListener not being called检测未调用 Moto 360/圆形和 onApplyWindowInset 侦听器
【发布时间】:2014-09-13 08:58:37
【问题描述】:

检测 Moto 360 屏幕形状的常用方法似乎无法正常工作。

我知道有报道说windowInset.isRound() 在 Moto 360 中返回 false。

目前我的代码如下

WatchViewStub viewStub = new WatchViewStub(this);
viewStub.setRoundLayout(com.pizzaentertainment.weatherwatchface.R.layout.bau);
viewStub.setRectLayout(com.pizzaentertainment.weatherwatchface.R.layout.bau_rect);
viewStub.setOnApplyWindowInsetsListener( new View.OnApplyWindowInsetsListener() {
    @Override
    public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
        Log.d("ISWHAT?", "ASD" +windowInsets.isRound());
        return windowInsets;
    }
});
addContentView(viewStub, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
viewStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
    @Override
    public void onLayoutInflated(WatchViewStub watchViewStub) {
        Log.d("INFLATED", "INFLATED");
    }
});

我的主要问题是 onApplyWindowInsets 在我的 LG G 手表和三星 Galaxy Gear Live 上都不会被调用。我对一个 360 用户进行了测试,根据测试,他的设备上也没有调用该方法。

  1. 为什么没有调用OnApplyWindowInsetListener
  2. 为什么收到回调工作的人报告windowInset.isRound()在Moto 360上返回false?
  3. 我们应该如何识别 Moto 360(以及未来的圆形)?来自Build.MODEL?

【问题讨论】:

    标签: android wear-os moto-360


    【解决方案1】:

    我也发现在真实设备上没有调用 setOnApplyWindowInsetsListener。它在 LG G Watch 和 Gear Live 上进行了检查。看起来这对于 Moto 360 也是如此。我做了以下解决方法:

        WatchViewStub stub = (WatchViewStub) findViewById(R.id.stub);
        stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
            @Override
            public void onLayoutInflated(WatchViewStub stub) {
                Log.d(TAG, "onLayoutInflated()");
                m_pager = (GridViewPager) findViewById(R.id.pager_square);
                m_roundScreen = false;
                if (m_pager == null) {
                    m_pager = (GridViewPager) findViewById(R.id.pager_round);
                    m_roundScreen = true;
                }
                // ... do other pager initializations
            }
        });
    

    在圆形和方形布局中为其中一个组件设置不同的 ID,并检查加载了哪个组件,因为我没有找到任何其他方式。在示例中,我为方形布局中的 GridViewPager pager_square 和圆形布局中的 pager_round 设置。不是很漂亮,但作为一种解决方法效果很好。

    【讨论】:

    • 行不通是什么意思?如果 GridViewStub 加载正确的圆形或方形布局,它将起作用,因为我以这种方式使用它,并且在方形屏幕上它加载方形布局。我无法测试它在 Moto 360 上加载的布局,那么您的陈述是否意味着它没有加载正确的布局?
    • 完全正确... Moto 360 没有加载正确的布局。
    • 我的 Moto 360 加载了正确的布局(圆形)。软件版本:4.4W.1 内部版本:KGW42R
    • 这也是我为我的应用程序所做的。如果您需要在代码中了解手表的外形尺寸,则可以轻松解决。
    【解决方案2】:

    您可能仍然没有这个问题,但我注意到我的圆形布局在我的 Moto 360 上没有被充气。相反,我的矩形布局被充气了。我通过将清单文件中的主题更改为 DeviceDefault 来解决此问题。

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 2019-07-25
      • 2019-01-26
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 2018-08-06
      • 2012-04-08
      相关资源
      最近更新 更多