代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
可动态添加数据的复选框
作者:
人生如歌
/ 发布于
2015/7/17
/
488
由于公司的业务需求,需要一个动态添加数据的复选框控件。一般的复选框个数都是固定的,此控件是根据数据来添加每一个复选框。
package com.tyclouds.xnr.view; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.view.Gravity; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.LinearLayout; /** * 可动态添加数据的复选框 * * @author liuyinjun * @date 2015年7月10日 上午10:03:12 */ public class CustomCheckBox extends LinearLayout { /** * 原始每行最多显示的个数 */ private static final int INITIAL_MAX_COUNT = 3; private Context mContext; /** * CheckBox 列表 */ private List<CheckBox> mCheckBoxs; /** * 每一个CheckBox 显示的内容 */ private List<String> mSelectedBoxContents; public CustomCheckBox(Context context) { this(context, null); } public CustomCheckBox(Context context, AttributeSet attrs) { this(context, attrs, 0); } @SuppressLint("NewApi") 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>(); } private void initOrientation(int orientation) { this.setOrientation(orientation); } /** * 获取已选中的项 * * @return */ public List<String> getSelectedBoxContents() { return mSelectedBoxContents; } 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); } } } 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); } private OnCheckedChangeListener listener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked)// 添加已选中的复选框 mSelectedBoxContents.add(buttonView.getText().toString()); else mSelectedBoxContents.remove(buttonView.getText().toString()); } }; }
试试其它关键字
复选框
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
人生如歌
贡献的其它代码
(
31
)
.
base64编码和图片互相转换
.
生成一个XElement字典
.
实现连接两个url
.
判断字符串中是否包含某个字符
.
获得进程内存使用量的脚本
.
实现ftp传输
.
获得web页面信息
.
获得系统属性和系统时间
.
获得进程号和进程的参数信息
.
读取邮件帐户信息
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3