检测未调用Moto 360/circlular shape和onApplyWindowInsetListener

And*_*ega 5 android moto-360 wear-os

看起来检测Moto 360屏幕形状的常用方法无法正常工作.

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

目前我的代码如下

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");
    }
});
Run Code Online (Sandbox Code Playgroud)

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

  1. 为什么OnApplyWindowInsetListener不被召唤?
  2. 为什么获得回调工作报告的人windowInset.isRound()在Moto 360上返回false?
  3. 我们如何认识Moto 360(以及具有圆形形状的未来)?来自Build.MODEL?

小智 3

我还发现 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
        }
    });
Run Code Online (Sandbox Code Playgroud)

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