效果如下:
首先布局是这样的,只有一个自定义的控件的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;
@Override
protected 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() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (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/Bottom
mlp.setMargins(dip2px, dip2px, dip2px, dip2px);
checkBox.setLayoutParams(mlp);
// 设置文字padding
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);
// 设置选择后文字颜色变化
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (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;
}
@Override
public 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;
}
}
下载地址