布局中包含自定义视图
当想要在Activity或Fragment布局中使用自定义视图时,可以像使用其它的视图一样,加入一些简单的XML。
1 2 3 4 | <com.ryanharter.android.compoundviews.app.views.FriendNameView
android:id="@+id/friend_names"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
|
和其它的视图一样,可以使用 findViewById(int)方法来得到它。
1 | mFriendNameView = (FriendNameView) findViewById(R.id.friend_names);
|
在我们的MainActivity中,当数据拾取器的值变化时,我们可以非常容易地设置朋友的数量。当想要获取名称列表时,调用getFriendNames()方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mFriendCountPicker.setOnValueChangedListener(new OnValueChangeListener() {
@Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
mFriendNameView.setFriendCount(newVal);
}
});
mCountFriendsButton.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
List<String> names = mFriendNameView.getFriendNames();
Intent i = new Intent(MainActivity.this, FriendCountActivity.class);
i.putStringArrayListExtra("names", new ArrayList<String>(names));
startActivity(i);
}
});
|
尽管这是一个刻意设计的例子,但是自定义复合视图是一个极好功能封装方式。如果不进行封装,功能代码将散落在整个活动和片段中。自定义复合视图提供了可测试、可重用的代码,让应用程序更稳定。我鼓励大家想一想,自己的应用程序中哪里可以使用自定义复合视图。如果可以的话并与其他开发者分享,它们是非常有用的。
本文的示例项目可以在Github上获取。
本文由 伯乐在线 - lum 翻译自 ryanharter。欢迎加入Android小组。转载请参见文章末尾处的要求。 |