Android_实例_利用RadioButton实现分类筛选

1.示意图


          


2.代码实现

/**
 * CategoryView.java
 * @author zimo2013
 * @see http://blog.csdn.net/zimo2013
 *
 */
public class CategoryView extends LinearLayout implements
		OnCheckedChangeListener {
	private LayoutInflater inflater;

	public CategoryView(Context context) {
		this(context, null);
	}

	public CategoryView(Context context, AttributeSet attrs) {
		super(context, attrs);
		inflater = LayoutInflater.from(context);
	}

	/**添加方法*/
	public void add(List<String> list) {
		if (list.size() > 0) {
			//加载布局
			View view = inflater.inflate(R.layout.category_container, null);
			addView(view);

			RadioGroup radioGroup = (RadioGroup) view.findViewById(R.id.container);
			RadioButton bt = newRadioButton("全部");
			radioGroup.addView(bt);

			// 默认选中
			radioGroup.check(bt.getId());
			// 全部
			for (String str : list) {
				bt = newRadioButton(str);//实例化新的RadioButton
				radioGroup.addView(bt);
			}
			//为当前RadioGroup设置监听器
			radioGroup.setOnCheckedChangeListener(this);
		}
	}

	/**创建RadioButton*/
	private RadioButton newRadioButton(String text) {
		RadioButton button = new RadioButton(getContext());
		
		RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(
				RadioGroup.LayoutParams.WRAP_CONTENT,
				RadioGroup.LayoutParams.WRAP_CONTENT);

		//设置内外边距
		params.leftMargin = 6;
		params.rightMargin = 6;
		button.setLayoutParams(params);
		button.setPadding(4, 0, 4, 0);

		//设置背景
		button.setBackgroundResource(R.drawable.selector_category_bg);
		//去掉左侧默认的圆点
		button.setButtonDrawable(android.R.color.transparent);
		//设置不同状态下文字颜色,通过ColorStateList,对应的selector放在res/color文件目录中,否则没有效果
		button.setTextColor(getResources().getColorStateList(R.color.selector_category_text));
		button.setGravity(Gravity.CENTER);
		button.setText(text);

		return button;
	}

	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		if(mListener != null){
			mListener.click(group, checkedId);
		}
	}

	/**指定监听器*/
	public void setOnClickCategoryListener(OnClickCategoryListener l){
		mListener = l;
	}
	private OnClickCategoryListener mListener;
	/**回掉接口*/
	public interface OnClickCategoryListener{
		/**点击事件发生*/
		public void click(RadioGroup group, int checkedId);
	}
}
/**
 * MainActivity.java 测试
 * @author zimo2013
 * @see http://blog.csdn.net/zimo2013
 *
 */
public class MainActivity extends Activity {

	private List<String> list = new ArrayList<String>();
	private List<String> list1 = new ArrayList<String>();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		CategoryView categoryView = (CategoryView) findViewById(R.id.category);
		
		list.add("内地1");
		list.add("内地2");
		list.add("内地3");
		list.add("内地4");
		list.add("内地5");
		list.add("内地6");
		list.add("内地7");
		list.add("内地8");
		list.add("内地9");
		
		list1.add("动作");
		list1.add("喜剧");
		list1.add("励志");
		list1.add("动作2");
		list1.add("喜剧2");
		list1.add("励志2");
		list1.add("动作3");
		list1.add("喜剧3");
		list1.add("励志3");
		
		categoryView.add(list);
		categoryView.add(list1);
		categoryView.add(list);
		
		//设置自定义监听器
		categoryView.setOnClickCategoryListener(new OnClickCategoryListener() {
			//逻辑回掉
			@Override
			public void click(RadioGroup group, int checkedId) {
				RadioButton button = (RadioButton) group.findViewById(checkedId);
				Toast.makeText(getApplicationContext(), button.getText(), 0).show();
			}
		});
	}
}

<?xml version="1.0" encoding="utf-8"?>
<!-- selector_category_text.xml 置于res/color 目录下  -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/white"/>
    <item android:state_focused="true" android:color="@color/white"/>
    <item android:color="@color/gray"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<!-- selector_category_bg.xml 置于res/drawable 目录下  -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@color/red"/>
    <item android:state_focused="true" android:drawable="@color/red"/>
    <item android:drawable="@color/white"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<!-- category_container.xml b布局文件 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:orientation="vertical" >

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="4dp"
        android:layout_marginTop="4dp"
        android:scrollbars="none" >

        <RadioGroup
            android:id="@+id/container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
        </RadioGroup>
    </HorizontalScrollView>

    <View
        android:layout_width="match_parent"
        android:layout_height="2.0px"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:background="#ffcccccc" />

</LinearLayout>
代码下载》》
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值