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>
代码下载》》