android动态设置配置项并随机排布并实现多选

来源:互联网 发布:电脑打电话软件 编辑:程序博客网 时间:2024/05/28 15:06

效果如下:


首先布局是这样的,只有一个自定义的控件的FlowLayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <com.example.zza_android_test7.FlowLayout        android:id="@+id/flow"        android:layout_width="match_parent"        android:layout_height="match_parent" >    </com.example.zza_android_test7.FlowLayout></RelativeLayout>
活动页面,实现了两种方法

package com.example.zza_android_test7;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.ViewGroup.MarginLayoutParams;import android.widget.CheckBox;import android.widget.LinearLayout;import com.example.zza_android_test7.FlowLayout.LayoutParams;public class MainActivity extends Activity {private FlowLayout flow;private List<String> dataList;private int dip2px;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dip2px = DensityUtil.dip2px(this, 10);getData();flow = (FlowLayout) findViewById(R.id.flow);// dynamicSetText();dynamicSetText2();}/** * 动态设置配置项 */@SuppressWarnings("deprecation")public void dynamicSetText() {/** * 布局中已经有FlowLayout这个控件了,但是这里为什么还要嵌套在CheckBox上再嵌套一层FlowLayout呢? * 因为FlowLayout中子控件是MarginLayoutParams, * 所以不管是FlowLayout再作为子控件还是CheckBox必须是MarginLayoutParams */FlowLayout.LayoutParams lp = new FlowLayout.LayoutParams(FlowLayout.LayoutParams.WRAP_CONTENT,FlowLayout.LayoutParams.WRAP_CONTENT);lp.leftMargin = DensityUtil.dip2px(this, 10);lp.rightMargin = DensityUtil.dip2px(this, 10);lp.topMargin = DensityUtil.dip2px(this, 5);lp.bottomMargin = DensityUtil.dip2px(this, 5);for (int i = 0; i < dataList.size(); i++) {String city = dataList.get(i);final CheckBox checkBox = new CheckBox(this);checkBox.setLayoutParams(new ViewGroup.LayoutParams(// ViewGroup.MarginLayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));checkBox.setPadding(dip2px, dip2px, dip2px, dip2px);checkBox.setBackgroundResource(R.drawable.selector_checkbox);checkBox.setButtonDrawable(getResources().getDrawable(android.R.color.transparent));checkBox.setText(city);flow.addView(checkBox, lp);// 设置选择后文字颜色变化checkBox.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (checkBox.isChecked()) {checkBox.setTextColor(getResources().getColor(R.color.green));} else {checkBox.setTextColor(getResources().getColor(R.color.black));}}});}}/** * 动态设置配置项 */@SuppressWarnings("deprecation")public void dynamicSetText2() {/** * 布局中已经有FlowLayout这个控件了,不需要再在CheckBox上嵌套一层FlowLayout呢, * 因为FlowLayout中子控件是MarginLayoutParams,所以CheckBox也要是MarginLayoutParams */for (int i = 0; i < dataList.size(); i++) {String city = dataList.get(i);final CheckBox checkBox = new CheckBox(this);MarginLayoutParams mlp = new MarginLayoutParams(MarginLayoutParams.WRAP_CONTENT,MarginLayoutParams.WRAP_CONTENT);// 设置marginLeft/Right/Top/Bottommlp.setMargins(dip2px, dip2px, dip2px, dip2px);checkBox.setLayoutParams(mlp);// 设置文字paddingcheckBox.setPadding(dip2px, dip2px, dip2px, dip2px);checkBox.setBackgroundResource(R.drawable.selector_checkbox);checkBox.setButtonDrawable(getResources().getDrawable(android.R.color.transparent));checkBox.setText(city);flow.addView(checkBox);// 设置选择后文字颜色变化checkBox.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (checkBox.isChecked()) {checkBox.setTextColor(getResources().getColor(R.color.green));} else {checkBox.setTextColor(getResources().getColor(R.color.black));}}});}}public List<String> getData() {dataList = new ArrayList<String>();dataList.add("南京");dataList.add("北京");dataList.add("连云港");dataList.add("青岛");dataList.add("丽江");dataList.add("漠河");dataList.add("重庆");return dataList;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}



下载地址

0 0
原创粉丝点击