可动态添加数据的复选框

变量如下所示:

/**
  * 原始每行最多显示的个数
  */
 private static final int INITIAL_MAX_COUNT = 3;
 private Context mContext;
 /**
  * CheckBox 列表
  */
 private List<CheckBox> mCheckBoxs;
 /**
  * 每一个CheckBox 显示的内容
  */
 private List<String> mSelectedBoxContents;

控件继承自LinearLayout,构造函数中默认设置为水平排列:

public CustomCheckBox(Context context, AttributeSet attrs, int defStyle) {

  super(context, attrs, defStyle);

  this.mContext = context;

  this.setOrientation(VERTICAL);

  mCheckBoxs = new ArrayList<CheckBox>();

  mSelectedBoxContents = new ArrayList<String>();

 }

初始化每一个CheckBox:

private void initCheckBox(LinearLayout linearLayout, String checkBoxText,

   int index) {

  CheckBox checkBox = new CheckBox(mContext);

  checkBox.setText(checkBoxText);

  checkBox.setTextSize(15.0f);

  checkBox.setTextColor(Color.parseColor("#88000000"));

  checkBox.setOnCheckedChangeListener(listener);

  checkBox.setTag(index);

  mCheckBoxs.add(checkBox);

  LinearLayout.LayoutParams checkBoxParams = new LayoutParams(

    LinearLayout.LayoutParams.WRAP_CONTENT,

    LinearLayout.LayoutParams.WRAP_CONTENT);

  checkBoxParams.gravity = Gravity.CENTER_VERTICAL;

  checkBoxParams.weight = 1.0f;

  linearLayout.addView(checkBox, checkBoxParams);

 }

根据显示的内容,动态生成每一个CheckBox,每行显示3个,超过一行的话每行再另外生成一个LinearLayout,再在每个LinearLayout里面填充CheckBox:

public void setCheckBoxs(List<String> checkBoxContents) {
  if (checkBoxContents == null || !mCheckBoxs.isEmpty())
   return;
  int checkBoxCount = checkBoxContents.size();
  if (checkBoxCount > INITIAL_MAX_COUNT) {
   initOrientation(LinearLayout.VERTICAL);
  } else {
   initOrientation(LinearLayout.HORIZONTAL);
  }
  if (this.getOrientation() == LinearLayout.VERTICAL) {// 竖直显示
   int checkBoxLines = checkBoxCount % INITIAL_MAX_COUNT == 0 ? checkBoxCount
     / INITIAL_MAX_COUNT
     : checkBoxCount / INITIAL_MAX_COUNT + 1;
   for (int i = 0; i < checkBoxLines; i++) {
    LinearLayout linearLayout = new LinearLayout(mContext);
    linearLayout.setOrientation(LinearLayout.HORIZONTAL);
    LinearLayout.LayoutParams lyParams = new LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT,
      LinearLayout.LayoutParams.WRAP_CONTENT);
    /** 最后一行显示余下的个数,其余每行显示最大的显示数目 */
    int count = (i == (checkBoxLines - 1) ? checkBoxCount
      % INITIAL_MAX_COUNT : INITIAL_MAX_COUNT);
    for (int j = 0; j < count; j++) {
     String checkBoxText = checkBoxContents.get(i
       * INITIAL_MAX_COUNT + j);
     initCheckBox(linearLayout, checkBoxText, i
       * INITIAL_MAX_COUNT + j);
    }
    this.addView(linearLayout, lyParams);
   }
  } else {// 水平显示
   for (int i = 0; i < checkBoxCount; i++) {
    String checkBoxText = checkBoxContents.get(i);
    initCheckBox(this, checkBoxText, i);
   }
  }
 }

贴码工作终于完成,其实只要有思路,代码还是蛮简单的。另外也可以用 RelativeLayout 来实现,具体就不再做撰述。希望对小伙伴们有用。

完整代码地址:http://www.oschina.net/code/snippet_1460984_49512

时间: 2024-12-28 23:09:30

可动态添加数据的复选框的相关文章

Qt树形控件QTreeView使用1——节点的添加删除操作 复选框的设置

QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有mvc的特点). 1. QStandardItemModel在QTreeView中的使用 使用QTreeView的对应模型是QStandardItemModel,这个是Qt对应ui界面最有用的模型,它可以用于树形控件.列表控件.表格控件等等和条目有关的控件.QStandardItemModel用于列表

给GridView添加列头复选框

1 using DevExpress.XtraEditors.Drawing; 2 using DevExpress.XtraEditors.Repository; 3 using DevExpress.XtraEditors.ViewInfo; 4 using DevExpress.XtraGrid.Views.Grid; 5 using System; 6 using System.Collections.Generic; 7 using System.Drawing; 8 using Sy

dojo:为数据表格添加复选框

一.添加复选框 此时应该选用EnhancedGrid,而不是普通的DataGrid.添加复选框需要设置EnhancedGrid的plugins属性,如下: gridLayout =[{ defaultCell: { type: cells._Widget, styles: 'text-align: center;' }, cells: [ { name: "WBS", field: "wbsCode", width: "60px"}, { nam

element-ui中el-table(隔行换色,复选框回显)

1.隔行换色 el-table加上改属性,然后操作该方法 之后在添加颜色  2.复选框回显 a:表格数据不是动态加载的情况下,表格会自动选中之前选中的 b:表格数据是动态获取的,需要根据行来进行回显 原理:拿已经存储好的之前选中的数据去匹配表格中某一行的某一个属性,两个数组对象中可以匹配上,表格便会回显成功. 原文地址:https://www.cnblogs.com/yxkNotes/p/11584656.html

AxureRP7.0基础教程系列 部件详解 Check Box 复选框

原型库网站-讲师金乌原创发布,可自由转载,请注明出处! Axure中文官网:www.AxureRP.cn   <AxureRP7.0部件详解> Check Box 复选框 常用案例 作为附加选项 复选框经常用来允许用户添加一个或多个附加选项. 选择多个选项 在这个例子中,有多个选项可以选择.新手容易和单选按钮搞混淆,单选按钮只能选择一个. 编辑复选框要将复选框默认设置为勾选,可以在设计区域单击复选框或者右键选择选中.复选框可以通过用例编辑器中的动作设置为选择/选中进行动态设置. 对齐方式 默认

HTML下拉列表框与复选框的区别

在用HTML创建表单的案例中,下拉列表框与复选框是有区别的,那在写HTML程序时,为了效果美观,我们也要特别注意.比如一般情况下,部门属性中用的是下拉列表框,所以不是在最后一个部门的结尾才加上换行符<br>,是在<select></select>之后,而对于兴趣复选框就可以随意的添加,因为复选框下的属性可以多选,竖着排的话就各位后面都加一个换行符,横着排就最后一个兴趣属性后加就可以了.而且换行符<br>没有closing tag,独立使用,很是方便.HTML

javascript如何动态添加checkbox复选框

javascript如何动态添加checkbox复选框:在实际应用中可能需要动态的添加复选框,下面就简单介绍一下如何实现此效果.单纯的创建一个复选框是很容易的,代码如下: var oCheckbox=document.createElement("input"); oCheckbox.setAttribute("type","checkbox"); oCheckbox.setAttribute("id","mayi&

Js动态添加复选框Checkbox的实例方法!!!

首先,使用JS动态产生Checkbox可以采用如下类似的语句: var checkBox=document.createElement("input"); checkBox.setAttribute("type","checkbox"); checkBox.setAttribute("id",'123456'); 但是,这样产生的checkbox是不带尾后的文字的,如果需要添加,那么需要使用 document.createTe

ajax动态添加复选框

1 function getLands() { 2 3 $.ajax({ 4 url:"httpserver.do?doPost&userQygs="+$("#userQygs").val(), 5 type:"POST", 6 dataType:"text", 7 8 success:function(data){ 9 10 if(data==null||data==""){ 11 12 aler