android自定义表格布局
来源:互联网 发布:qq的网络传输协议 编辑:程序博客网 时间:2024/06/06 09:39
最近由于项目需要,要求将服务器返回来的Json数组以表格的形式去存放,取代之前的ListView,苦想了一天后,又借鉴了一些大神们的代码,加上自己的一些理解封闭了一个纯代码表格类,先看一对一表格效果图:
完全与网站上的表格效果是一致的,下面再看一再一对多表格的效果图:
.
话不多说:将自己封装好的表格类代码贴上:
package com.micen.buyers.view.productdetail;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import android.content.Context;import android.graphics.drawable.Drawable;import android.text.Html;import android.util.AttributeSet;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TableLayout;import android.widget.TextView;import com.micen.buyers.activity.R;import com.micen.buyers.adapter.PriceTableAdapter;import com.micen.buyers.module.product.ProductKeyValuePair;import com.micen.buyers.util.Util;public class NormalTableLayout extends TableLayout{ //UI组件 private LinearLayout viewGroup; private View tableTitleDivider; private TextView tableTitle; public TableLayout tableContent; private View tableFooter; private Context context; /** * 声明长宽 */ private static final int WC = ViewGroup.LayoutParams.WRAP_CONTENT; private static final int FP = ViewGroup.LayoutParams.MATCH_PARENT; /** *数据属性,单位均为dp */ private ArrayList<ProductKeyValuePair> list; private HashMap<String, ArrayList<ProductKeyValuePair>> map; private HashMap<String, Object> styleList; private ArrayList<String> importantList; private String title; private boolean important; private boolean hasFilter; private int leftTableWidth; private int rightTableWidth; private int dividerHeight; private PriceTableAdapter adapter; /** * 样式属性 * @param context */ private int dividerColor; private int forwardColor; private int leftTextColor; private int rightTextColor; private int importantColor; private int leftTextSize; private int rightTextSize; private int paddingTop; private int paddingBottom; private int leftGravity; private int rightGravity; private Drawable dividerDrawable; /** * 表格标题属性,可设可不设,不设则无标题 * @param context */ private int titleHeight; private int titleWeight; private int titleBackground; private int titlePaddingLeft; private int titleTextSize; /** * 单元格点击事件处理,可以根据自己的需求添加不同的事件处理 * @param context */ private OnClickListener clickListener; public NormalTableLayout(Context context) { this(context, null); } public NormalTableLayout(Context context, AttributeSet attrs) { super(context, attrs); initView(context); initData(); initStyle(); } /** * 初始化默认属性 */ private void initStyle() { dividerColor = context.getResources().getColor(R.color.mic_menu_line); dividerDrawable = context.getResources().getDrawable(R.color.mic_menu_line); forwardColor = context.getResources().getColor(R.color.mic_white); leftTextColor = context.getResources().getColor(R.color.mic_home_menu_text); importantColor = context.getResources().getColor(R.color.get_last_price_normal); rightTextColor = context.getResources().getColor(R.color.search_list_item_left); leftTextSize = rightTextSize = 12; paddingBottom = paddingTop = Util.dip2px(12); leftGravity = Gravity.RIGHT; rightGravity = -1; /** * 标题属性 */ titleBackground = context.getResources().getColor(R.color.setting_bg_color); titleWeight = FP; titleHeight = Util.dip2px(29); titleTextSize = 15; dividerHeight = Util.dip2px(0.5f); titlePaddingLeft = Util.dip2px(15); } /** * 初始化数据属性 */ private void initData() { hasFilter = true; list = new ArrayList<ProductKeyValuePair>(); styleList = new HashMap<String, Object>(); importantList = new ArrayList<String>(); } /** * 初始化UI组件 * @param context */ private void initView(Context context) { this.context = context; viewGroup = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.my_table_layout, null); tableTitleDivider = (View) viewGroup.findViewById(R.id.table_title_didiver); tableTitle = (TextView) viewGroup.findViewById(R.id.table_title); tableContent = (TableLayout) viewGroup.findViewById(R.id.table_content); tableFooter = (View) viewGroup.findViewById(R.id.table_footer_divider); addView(viewGroup); } /** * 初始化一些变量值 * @param pairs * @param title * @param width */ public void initParams(ArrayList<ProductKeyValuePair> pairs, String title, int leftTableWidth) { this.list = pairs; this.title = title; this.leftTableWidth = leftTableWidth; this.rightTableWidth = leftTableWidth * 2; } public void initParams(HashMap<String, ArrayList<ProductKeyValuePair>> map, String title, int leftTableWidth) { this.map = map; this.title = title; this.leftTableWidth = leftTableWidth; this.rightTableWidth = leftTableWidth * 2; } /** * 属性get,set方法 * @return */ public ArrayList<ProductKeyValuePair> getList() { return list; } public void setList(ArrayList<ProductKeyValuePair> list) { this.list = list; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } /** * 添加一组数据集合 * @param collection */ public void addList(ArrayList<ProductKeyValuePair> collection) { if (this.list != null) { if (collection != null && collection.size() > 0) { this.list.addAll(collection); } } } /** *声明表格重要数据,以特别的颜色显示 * @return */ public ArrayList<String> getImportantList() { return importantList; } public void setImportantList(ArrayList<String> importantList) { this.importantList = importantList; } public void addImportantList(ArrayList<String> collection) { if (this.importantList != null) { if (collection != null && collection.size() > 0) { this.importantList.addAll(collection); } } } /** * 添加重要数据 * @param collection */ public void addImportant(String importantItem) { if (this.importantList != null) { this.importantList.add(importantItem); } } public void setDividerColor(int dividerColor) { this.dividerColor = dividerColor; } public void setForwardColor(int forwardColor) { this.forwardColor = forwardColor; } public void setLeftTextColor(int leftTextColor) { this.leftTextColor = leftTextColor; } public void setRightTextColor(int rightTextColor) { this.rightTextColor = rightTextColor; } /** *设置重要数据的显示颜色 * @param importantColor */ public void setImportantColor(int importantColor) { this.importantColor = importantColor; } public void setLeftTextSize(int leftTextSize) { this.leftTextSize = leftTextSize; } public void setRightTextSize(int rightTextSize) { this.rightTextSize = rightTextSize; } public void setPaddingTop(int paddingTop) { this.paddingTop = paddingTop; } public void setPaddingBottom(int paddingBottom) { this.paddingBottom = paddingBottom; } public void setRightTableWidth(int rightTableWidth) { this.rightTableWidth = rightTableWidth; } public void setLeftTableWidth(int leftTableWidth) { this.leftTableWidth = leftTableWidth; } public void setHasFilter(boolean hasFilter) { this.hasFilter = hasFilter; } public void setDividerHeight(int dividerHeight) { this.dividerHeight = dividerHeight; } public void setLeftGravity(int leftGravity) { this.leftGravity = leftGravity; } public void setRightGravity(int rightGravity) { this.rightGravity = rightGravity; } public void setTitleHeight(int titleHeight) { this.titleHeight = titleHeight; } public void setTitleWeight(int titleWeight) { this.titleWeight = titleWeight; } public void setTitleBackground(int titleBackground) { this.titleBackground = titleBackground; } public void setTitlePaddingLeft(int titlePaddingLeft) { this.titlePaddingLeft = titlePaddingLeft; } public void setTitleTextSize(int titleTextSize) { this.titleTextSize = titleTextSize; } public void setDividerDrawable(Drawable dividerDrawable) { this.dividerDrawable = dividerDrawable; } public void setMap(HashMap<String, ArrayList<ProductKeyValuePair>> map) { this.map = map; } /** * 事件处理回调方法 */ public void setClickListener(OnClickListener clickListener) { this.clickListener = clickListener; } /** *绘制一对一表格 */ public void createOne2OneTable() { if (title != null && title.length() > 0 && title != "") { resetTitle(); } else { hideTitle(); } if (list != null && list.size() > 0) { for (ProductKeyValuePair pair : list) { if (pair.value.toString() != null && pair.value.toString().trim().length() > 0) { if (importantList.contains(pair.key)) { important = true; } else { important = false; } tableContent.addView(createTableItem(pair.key + (hasFilter ? ":" : ""), pair.value.toString())); } else { continue; } } } else { /** * �������������Ҳ���� */ tableFooter.setVisibility(View.GONE); hideTitle(); } } /** * 重置表格标题 */ private void resetTitle() { tableTitle.setText(title); tableTitle.setBackgroundColor(titleBackground); LinearLayout.LayoutParams title_params = new LinearLayout.LayoutParams(titleWeight, titleHeight); tableTitle.setLayoutParams(title_params); tableTitle.setTextSize(titleTextSize); LinearLayout.LayoutParams title_divider_params = new LinearLayout.LayoutParams(titleWeight, dividerHeight); tableTitleDivider.setLayoutParams(title_divider_params); tableTitle.setPadding(titlePaddingLeft, 0, 0, 0); } public void hideTitle() { tableTitle.setVisibility(View.GONE); tableTitleDivider.setVisibility(View.GONE); } public void showTitle() { tableTitle.setVisibility(View.VISIBLE); tableTitleDivider.setVisibility(View.VISIBLE); } /** * 删除表格旧数据 */ public void removeOldData() { if (tableContent.getChildCount() > 0) { tableContent.removeAllViews(); } } /** *绘制一对一表格每一项 * @param text1 * @param text2 * @return */ private LinearLayout createTableItem(String text1, String text2) { LinearLayout layout_outer = new LinearLayout(context); layout_outer.setBackgroundColor(dividerColor); layout_outer.setPadding(0, dividerHeight, dividerHeight, 0); LinearLayout layout_inner = new LinearLayout(context); layout_inner.setBackgroundColor(forwardColor); layout_inner.setOrientation(LinearLayout.HORIZONTAL); TextView tv1 = new TextView(context); LinearLayout.LayoutParams tv_params = new LinearLayout.LayoutParams(leftTableWidth, WC); tv1.setText(Html.fromHtml(text1)); tv1.setLayoutParams(tv_params); tv1.setTextSize(leftTextSize); tv1.setTextColor(leftTextColor); tv1.setGravity(leftGravity); tv1.setPadding(0, paddingTop, Util.dip2px(9), paddingBottom); ImageView view = new ImageView(context); LinearLayout.LayoutParams view_params = new LinearLayout.LayoutParams(dividerHeight, FP); view.setLayoutParams(view_params); view.setBackgroundColor(dividerColor); TextView tv2 = new TextView(context); LinearLayout.LayoutParams tv_params_2 = new LinearLayout.LayoutParams(rightTableWidth, WC); tv2.setText(Html.fromHtml(Util.replaceHtmlStr(text2))); tv2.setLayoutParams(tv_params_2); tv2.setTextSize(rightTextSize); tv2.setTextColor(important ? importantColor : rightTextColor); if (rightGravity != -1) { tv2.setGravity(rightGravity); } if (important) { tv2.setOnClickListener(clickListener); } tv2.setPadding(Util.dip2px(9), paddingTop, Util.dip2px(15), paddingBottom); layout_inner.addView(tv1); layout_inner.addView(view); layout_inner.addView(tv2); layout_outer.addView(layout_inner); return layout_outer; } /** *绘制一对多表格 */ public void createOne2ManyTable() { if (title != null && title.length() > 0 && title != "") { resetTitle(); } else { hideTitle(); } if (map != null && map.size() > 0) { Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); tableContent.addView(createTableItem(entry.getKey().toString(), (ArrayList<ProductKeyValuePair>) entry.getValue())); } } else { hideTitle(); } tableFooter.setVisibility(View.GONE); } /** *利用ListView表格绘制一对多表格 */ public LinearLayout createTableItem(String text1, ArrayList<ProductKeyValuePair> tempList) { LinearLayout layout_outer = new LinearLayout(context); layout_outer.setBackgroundColor(dividerColor); layout_outer.setPadding(0, dividerHeight, 0, 0); LinearLayout layout_inner = new LinearLayout(context); layout_inner.setBackgroundColor(forwardColor); layout_inner.setOrientation(LinearLayout.HORIZONTAL); TextView tv1 = new TextView(context); LinearLayout.LayoutParams tv_params = new LinearLayout.LayoutParams(leftTableWidth, WC); tv1.setText(text1); tv1.setLayoutParams(tv_params); tv1.setTextSize(leftTextSize); tv1.setTextColor(leftTextColor); tv1.setGravity(leftGravity); tv1.setPadding(0, paddingTop, Util.dip2px(9), 0); ImageView view = new ImageView(context); LinearLayout.LayoutParams view_params = new LinearLayout.LayoutParams(dividerHeight, FP); view.setLayoutParams(view_params); view.setBackgroundColor(dividerColor); ProductDetailListView listView = new ProductDetailListView(context); LinearLayout.LayoutParams list_params = new LinearLayout.LayoutParams(rightTableWidth, WC); listView.setLayoutParams(list_params); listView.setClickable(false); listView.setCacheColorHint(R.color.transparent); listView.setSelector(R.color.transparent); listView.setDivider(dividerDrawable); listView.setDividerHeight(dividerHeight); sendParamsToAdapter(); adapter = new PriceTableAdapter(context, tempList, styleList); listView.setAdapter(adapter); Util.setListViewHeightBasedOnChildren(listView); layout_inner.addView(tv1); layout_inner.addView(view); layout_inner.addView(listView); layout_outer.addView(layout_inner); return layout_outer; } private void sendParamsToAdapter() { styleList.put("rightTextColor", rightTextColor); styleList.put("dividerColor", dividerColor); styleList.put("rightTextSize", rightTextSize); }}思路:一对一表格的实现思路就是先写一个一对一单元格的方法,封装好后,根据外部传来的集合执行一次遍历,调用绘制一对一表格的方法,即可将整个表格绘制出来,一对一表格的详细实现步骤请看代码,不是很难,只是有点烦锁.一对多表格则多的一方要借助ListView来完成,通过为ListView的Item设置不同的数量来实现多列的效果.
0 0
- android自定义表格布局
- android布局之表格布局
- android-TableLayout 表格布局
- Android表格布局
- Android 表格布局
- Android--表格布局
- Android 表格布局<TableLayout>
- android:TableLayout表格布局
- android:TableLayout表格布局
- Android表格布局
- Android TableLayout表格布局
- Android表格布局
- Android表格布局
- Android表格布局
- Android表格布局示例
- Android TableLayout 表格布局
- Android GridLayout 表格布局
- Android 表格布局
- Android ImageView剖析及拓展
- 网站优化排名如何添加高质量的友情链接
- 在Ubuntu下构建Bullet以及运行Bullet的例子程序
- 跟着官方文档学HINT(二)优化器模式
- Oracle Database 9i/10g/11g编程艺术 笔记
- android自定义表格布局
- 生成树
- 黑马程序员-->Java基础-->数组
- 如何理解K线所包含的奥秘
- POJ 3630 --Trie
- QT Demo 之 MouseArea
- Dijkstra 最短路径算法的设计与PHP实现
- 拖延症的自白
- Linux的selinux