Android Weartypes检测 – 圆形或方形

我很想知道磨损types,无论是圆形还是方形,因为在设备types的基础上,我想为圆形和方形制作不同的视图。 从这篇文章我已经知道,在SDK-20 android.view.View类有一个新的侦听器来检测设备types,使用此我想获得设备types,但没有什么是在logcat上打印。 下面是我试过的代码。

 public class WearSplash extends Activity implements OnApplyWindowInsetsListener { private WatchViewStub _stub = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wear_splash); _stub = (WatchViewStub) findViewById(R.id.watch_view_stub); _stub.setOnApplyWindowInsetsListener(this); _stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub mStub) { // here on the basis of device type i want to inflate views. } }); } @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { System.out.println(" in testing phase"); if (insets.isRound()) System.out.println("in round"); else System.out.println("in square"); return null; } } 

xml文件。

 <?xml version="1.0" encoding="utf-8"?> <android.support.wearable.view.WatchViewStub xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/watch_view_stub" android:layout_width="match_parent" android:layout_height="match_parent" app:rectLayout="@layout/rect" app:roundLayout="@layout/round" tools:context="com.app.WearSplash" tools:deviceIds="wear" > </android.support.wearable.view.WatchViewStub> 

回合:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.app.WearSplash" tools:deviceIds="wear_round" > <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="fill_parent" android:contentDescription="@string/hello_world" /> </RelativeLayout> 

广场:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.app.WearSplash" tools:deviceIds="wear_square" > <ImageView android:id="@+id/image" android:layout_height="fill_parent" android:layout_width="fill_parent" android:contentDescription="@string/hello_world" android:background="@drawable/ic_launcher"/> </LinearLayout> 

我是新的发展,让我知道我要去哪里错了。 协助双手将受到高度赞赏。

Solutions Collecting From Web of "Android Weartypes检测 – 圆形或方形"

非官方的方式(不使用WatchViewStub) – 但对我来说,这是方式更容易。 https://github.com/tajchert/ShapeWear

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

API 23介绍:

isScreenRound()

使用WatchViewStub来扩大视图。在布局文件中,您可以指定每种手表types的布局,如下所示。它将根据设备的要求自动select正确的布局。

 <android.support.wearable.view.WatchViewStub . . . app:rectLayout="@layout/rect_activity_my_wear" app:roundLayout="@layout/round_activity_my_wear" . . . > 

如果您需要以编程方式获取此信息,则添加为setOnApplyWindowInsetsListener()添加侦听器是正确的。 但是,为了触发这个,你必须调用requestApplyInsets()

在任何情况下,如果您只想知道在两个可选布局之间切换,可以使用WatchViewStub类自动执行此操作(文档WatchViewStub 此处 )。