自定义UI(由下而上版)之第三阶段
来源:互联网 发布:怎样删除淘宝评价照片 编辑:程序博客网 时间:2024/05/18 00:35
第三阶段:创建ContainerView
这里继承LineaLayout,也可继承ScrollView,这样页面可以滑动,根据自己的需求确定
一、创建GroupViewDescriptor,描述GroupView的属性
public class GroupDescriptor { public String title; public List<RowDescriptor> descriptors; public GroupDescriptor(String title, List<RowDescriptor> descriptors) { this.title = title; this.descriptors = descriptors; } public GroupDescriptor(List<RowDescriptor> descriptors) { this.descriptors = descriptors; }}
二、创建ContainerView
1、初始化数据
public void initializeData(List<GroupDescriptor> descriptors, OnRowClickListener listener) { this.descriptors = descriptors; this.listener = listener; setOrientation(VERTICAL); }
2、通知数据更新
public void notifyDataChanged() { if (descriptors != null && descriptors.size() > 0) { GroupView group = null; float density = context.getResources().getDisplayMetrics().density; LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); params.topMargin = (int)(20 * density); for (GroupDescriptor descriptor : descriptors) { group = new GroupView(context); group.initializeData(descriptor, listener); group.notifyDataChanged(); addView(group, params); } setVisibility(View.VISIBLE); } else { setVisibility(View.GONE); } }
三、更新GroupView,将initializeData()方法中的参数List descriptors换成GroupDescriptor descriptor,以下所需数据出依次修改
public void initializeData(GroupDescriptor descriptor, OnRowClickListener listener) { this.title = descriptor.title; this.descriptors = descriptor.descriptors; this.listener = listener; }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; RowDescriptor descriptor = null; for (int i = 0; i < length; i++) { descriptor = descriptors.get(i); rowView = new RowView(context); rowView.initializeData(descriptor, 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); } }
四、调用代码查看MainActivity文件以下方法
// RowView getRowView(); // GroupView getGroupView(); // ContainerView getContainerView();
最终效果图:
由下而上版框架链接目录:
第一阶段:自定义RowView
第二阶段:创建GroupView
第三阶段:创建ContainerView
相关知识来源:
stay老兄的有心课堂-自定义RowView
0 0
- 自定义UI(由下而上版)之第三阶段
- 自定义UI(由下而上版)之第一阶段
- 自定义UI(由下而上版)之第二阶段
- UI 第三阶段笔记
- UI控件笔记(十七):UI之UI阶段控件常用方法大全总结
- uboot1.1.6 之 第二阶段 第三阶段
- IOS7(新UI之自定义UITableViewCell)
- 自定义UI之ActionBar
- UI之自定义View
- 第一行代码第二版(郭霖著)笔记之第三章(UI开发的点点滴滴)
- 自己动手写处理器之第三阶段——教学版OpenMIPS处理器蓝图
- (第三阶段)第31讲
- Linux教学辅助训练(第三阶段)
- Linux教学辅助训练(第三阶段)
- flex中实现marquee效果(由下而上滚动)
- flex中实现marquee效果(由下而上滚动)
- flex中实现marquee效果(由下而上滚动)
- 高仿易信UI之自定义ActionBar
- SQL_left join 和from 两个表的区别
- GCD延时加载
- 使用Gson结合泛型类灵活解析JSON数据
- C 简单选择排序
- android注解
- 自定义UI(由下而上版)之第三阶段
- 6
- Swift 调用oc 桥接头文件
- linux中ps命令的用法说明
- JMeter遇到问题FQA
- subsets
- Github进行fork后如何与原仓库同步
- 架构之路(6):把框架拉出来
- 内核空间和用户空间