在android中定义自定义checkbox

如何在android中自定义checkbox

我目前的XML ::

<LinearLayout android:id="@+id/linearLayout_individualdays" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_below="@+id/linearLayout_type_of_days" android:gravity="center|top" android:orientation="horizontal" android:paddingLeft="5dp" android:paddingTop="10dp" android:visibility="gone" > <CheckBox android:id="@+id/checkBox1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mon" /> <CheckBox android:id="@+id/checkBox2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tue" /> <CheckBox android:id="@+id/checkBox3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Wed" /> <CheckBox android:id="@+id/checkBox4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Thu" /> </LinearLayout> 

Out-Put ::

在这里输入图像说明

但如何使如下所示 ::

在这里输入图像说明

  • 这里蓝色边框显示它的select
  • 否则它没有被选中
  • 它必须是一个checkbox

希望我清楚!

Solutions Collecting From Web of "在android中定义自定义checkbox"

使用这个代码

在drawable文件夹中select

  <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#ffffff" > </solid> <stroke android:width="2dp" android:color="#ff0000" > </stroke> <corners android:radius="5dp" /> <padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" /> </shape> 

在drawable文件夹中deselect.xml

  <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#ffffff" > </solid> <stroke android:width="2dp" android:color="#000000" > </stroke> <corners android:radius="5dp" /> <padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" /> </shape> 

和自定义checkbox

 public class checkbox extends CheckBox{ public checkbox(Context context, AttributeSet attrs) { super(context, attrs); //setButtonDrawable(new StateListDrawable()); } @Override public void setChecked(boolean t){ if(t) { this.setBackgroundResource(R.drawable.select); } else { this.setBackgroundResource(R.drawable.deselect); } super.setChecked(t); } } 

checkbox

  <com.example.checkbox.checkbox android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@null" android:checked="true" android:text="checked" /> 

你可以改变select.xml和deselect.xml的颜色到你想要的东西

为了您的要求,我更喜欢你使用CheckedTextView而不是CheckBox.Here是你想要的代码。

  <CheckedTextView android:id="@+id/ctv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Mon" android:textSize="22sp" android:layout_margin="30dp" android:checked="true" android:background="@drawable/chk_indicator" android:padding="15dp" /> 

在可绘制文件夹中创build3个xml(chk_indicator.xml,chk_bg.xml,chk_pressed_bg.xml)

chk_indicator.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked ="true" android:drawable="@drawable/chk_pressed_bg" /> <item android:drawable="@drawable/chk_bg" /> </selector> 

chk_bg.xml

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" > <solid android:color="#ffffff"/> <stroke android:width="3dp" android:color="#ababab"/> <corners android:radius="10dp"/> </shape> </item> </layer-list> 

chk_pressed_bg.xml

  <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" > <solid android:color="#ffffff"/> <stroke android:width="3dp" android:color="#5e9eff"/> <corners android:radius="10dp"/> </shape> </item> </layer-list> 

输出:

图片http://i41.tinypic.com/2dawois.png

在CheckedTextView上设置onClick事件

  ((CheckedTextView)findViewById(R.id.ctv)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { boolean isChecked = ((CheckedTextView)findViewById(R.id.ctv)).isChecked(); if(isChecked) ((CheckedTextView)findViewById(R.id.ctv)).setChecked(false); else ((CheckedTextView)findViewById(R.id.ctv)).setChecked(true); } }); 
 <CheckBox android:id="@+id/DinnerRG_ID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="2dp" android:background="@drawable/yourbuttonbackground" android:button="@android:color/transparent" android:gravity="center_horizontal" android:padding="5dp" android:text="Wed" android:textSize="15dp" /> 

在这里输入图像说明

像这样尝试。

添加到zohreh的答案 ,你可以得到checkbox只有文本和摆脱checkbox图标如下所示,

在这里输入图像说明

为此,在自定义checkbox类的构造函数中将drawable设置为null,如下所示,

 public MyCheckBox(Context context, AttributeSet attrs) { super(context, attrs); // Don't show the checkbox. setButtonDrawable(null); }