看起来检测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");
}
});
我的主要问题是我的LG G手表和三星Galaxy Gear Live都没有调用onApplyWindowInsets
。我和360用户进行了测试,根据测试,该方法也没有在他的设备上调用。
OnApplyWindowInsetListener
没有被调用?windowInset.isRound()
在Moto 360上返回false?Build.MODEL
?答案 0 :(得分: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
}
});
在您的圆形和方形布局中设置其中一个组件的不同ID,并检查哪一个已加载,因为我没有找到任何其他方式。在示例中,我在方形布局中设置了GridViewPager pager_square,在圆形布局中设置了pager_round。不是很漂亮,但作为一种解决方法很好。
答案 1 :(得分:0)
你可能还没有遇到这个问题,但我注意到我的圆形布局没有在我的Moto 360上充气。相反,我的长方形是。我通过将清单文件中的主题更改为DeviceDefault
来修复此问题。