布局中包含自定义视图
当想要在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小组。转载请参见文章末尾处的要求。 |