前面就提到过目前手表主要分为方形,圆形两类的格局,并且也说过会告诉大家通过怎么样的方式去自动加载对应的布局,所以我明显不得骗你,因为我知道你读书少。。。。
其实很简单,最开始我以为和phone一样通过建立不同的layout或者在代码获取高宽算法的方式来兼容布局,但是后面我实现的时候发现,方形还好说,和手机差不多,左上角坐标开始计算,那圆形呢?怎么计算?我也不知道。(至少写到这里的时候我真的不知道,因为左上角到顶部中心是个弧形,所以不懂怎么计算的),然后这种时候必须去找官方文档,才发现原来官方已经提供了方法(之前真是蠢哭了,一般菜鸟都这样,绕圈圈,走弯路),那就是今天的主角WatchViewStub。
之前我们布局就是直接在主activity引用对应的布局,引用控件,实现逻辑就可以了,所以既然是兼容模式,肯定不能这么玩滴。
首先在layout下建立一个叫activity_wear.xml布局文件内容如下:
<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_activity_wear"
app:roundLayout="@layout/round_activity_wear">
</android.support.wearable.view.WatchViewStub>```
通过上面的代码可以看出有两个属性:
1.app:rectLayout="@layout/rect_activity_wear"
矩形(方形)格局的布局文件
2.app:roundLayout="@layout/round_activity_wear"
圆形格局的布局文件
布局文件做好以后,就在需要引用的activity中setContent布局就可以了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wear);
WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override public void onLayoutInflated(WatchViewStub stub) {
// Now you can access your views
TextView tv = (TextView) stub.findViewById(R.id.text);
...
}
});
}
布局加载完成后系统根据当前手表的格局加载对应的文件,等待布局加载完成直接就可以在onLayoutInflated中实现你的相应逻辑。
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/3982371-ab9f84f247908c56.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
-------------------------华丽丽的分割线---------------------------------
总结:因为目前市场上的手表还没有很多的样式,主要就是这两种模式,所以在适配方面应该不是很难,根据不同的格局分别做不同的布局
,感觉也挺方便的。
<a href="http://www.jianshu.com/p/6141678a58a1">下一篇</a>