自定义UI(由下而上版)之第二阶段
来源:互联网 发布:网络局域网上不了 编辑:程序博客网 时间:2024/06/08 03:15
第二阶段:创建GroupView
RowView已经创建好,将RowView装进GroupView
一、创建RowDescriptor
作用:描述RowView包含的信息,当添加不同样式的RowView时,同时创建相对应的Descriptor即可
public class RowDescriptor { public int iconResId; // 资源id public String label; // 描述 public RowActionEnum actionEnum; // 动作 public RowDescriptor(int iconResId, String label, RowActionEnum actionEnum) { super(); this.iconResId = iconResId; this.label = label; this.actionEnum = actionEnum; }}
二、创建GroupView,这里继承LinearLayout
1、初始化视图
private void initializeView(Context context) { this.context = context; // 设置GroupView中RowView的排列样式 setOrientation(VERTICAL); }
2、初始化数据
传递的不再是单个的RowView而是RowView集合
public void initializeData(List<RowDescriptor> descriptors, OnRowClickListener listener) { this.descriptors = descriptors; this.listener = listener; }
3、更新数据
public void notifyDataChanged() { if (descriptors != null && descriptors.size() > 0) { int length = descriptors.size(); RowView rowView = null; View line = null; LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, 1); params.leftMargin = 10; // 创建RowView for (int i = 0; i < length; i++) { rowView = new RowView(context); rowView.initializeData(descriptors.get(i), listener); rowView.notifyDataChanged(); addView(rowView); // 创建直线 if (i != length - 1) { line = new View(context); line.setBackgroundResource(R.color.widget_general_row_line); addView(line, params); } } } else { setVisibility(View.GONE); } }
三、修改RowView,将initializeData()方法中的参数修改成描述对象而不再是单个的属性参数
1、初始化数据
public void initializeData(RowDescriptor descriptor, OnRowClickListener listener) { this.descriptor = descriptor; this.listener = listener; }
2、更改数据
public void notifyDataChanged() { if (descriptor != null) { mWidgetRowIconImg.setBackgroundResource(descriptor.iconResId); mWidgetRowLabel.setText(descriptor.label); if (descriptor.actionEnum != null) { setOnClickListener(this); setBackgroundResource(R.drawable.widgets_general_row_selector); mWidgetRowActionBtn.setVisibility(View.VISIBLE); } else { mWidgetRowActionBtn.setVisibility(View.GONE); } } else { setVisibility(View.GONE); } }
3、相应点击事件
@Override public void onClick(View v) { if (listener != null) { listener.onRowClick(descriptor.actionEnum); } }
四、activity_main中引用自定义GroupView
<com.example.fsf_view.widgets.group.GroupView android:id="@+id/mWidgetGroupView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:background="@color/withe" />
五、MainActivity中引用自定义GroupView
private void getGroupView() { mWidgetGroupView = (GroupView)findViewById(R.id.mWidgetGroupView); List<RowDescriptor> descriptors = new ArrayList<RowDescriptor>(); descriptors.add(new RowDescriptor(R.drawable.ic_game_icon, "My Posts One", RowActionEnum.MY_POSTS_ONE)); descriptors.add(new RowDescriptor(R.drawable.ic_game_icon, "My Posts Two", RowActionEnum.MY_POSTS_TWO)); descriptors.add(new RowDescriptor(R.drawable.ic_game_icon, "My Posts Three", RowActionEnum.MY_POSTS_THREE)); mWidgetGroupView.initializeData(descriptors, this); mWidgetGroupView.notifyDataChanged(); }
========第二阶段完=========
由下而上版框架链接目录:
第一阶段:自定义RowView
第二阶段:创建GroupView
第三阶段:创建ContainerView
相关知识来源:
stay老兄的有心课堂-自定义RowView
0 0
- 自定义UI(由下而上版)之第二阶段
- 自定义UI(由下而上版)之第一阶段
- 自定义UI(由下而上版)之第三阶段
- u-boot第二阶段之start_armboot()函数
- IOS7(新UI之自定义UITableViewCell)
- 自定义UI之ActionBar
- UI之自定义View
- 实习感想之第二阶段
- uboot分析之第二阶段
- flex中实现marquee效果(由下而上滚动)
- flex中实现marquee效果(由下而上滚动)
- flex中实现marquee效果(由下而上滚动)
- 高仿易信UI之自定义ActionBar
- Android UI之自定义SeekBar
- Android UI之自定义AutoCompleteTextView
- 【软考之路】第二阶段总结(一)
- (嵌入式开发)自己写bootloader之编写第二阶段
- 第二阶段工作之移植uboot2017(NAND篇)(一)
- Swift中自定义Cell
- jfinal框架初识
- Elastic Search increase memory/heap
- 理解快速傅里叶变换(FFT)算法
- MySQL导数据
- 自定义UI(由下而上版)之第二阶段
- Decorator模式——设计模式学习笔记
- 使用C++ 调用 C# 程序
- java集合类
- 环信即时通讯-服务器端集成(REST API)-php版demo
- 手把手带你画一个动态错误提示 Android自定义view
- js正则
- TCL QUHD引行业遐想,中国有望成为显示行业绝对霸主
- GCD的顺序下载