android: CheckedTextView cannot be checked? android: CheckedTextView cannot be checked? android android

android: CheckedTextView cannot be checked?


It is possible, and somewhat simple to implement what you are looking for. Yes, CheckedTextView is used primarily for having a single Checkable view in the row of a ListView, which controls its children's checkable states using choiceMode. However, since CheckBox does not appear to support a right-aligned checkbox on its own, and CheckedTextView is a right-aligned checkbox, it makes sense to want to use what's there.

Because ListView controls the checked state of a list item, the CheckedTextView itself does not respond to click events, and is not clickable or focusable by default. It does respond to pressed and focused states, however -- that means it can receive focus and click events, and looks correct as far as a checkbox should look. The only thing missing is that it does not toggle its checked state on click. Therefore, a quick OnClickListener that calls .toggle() will give you the end result you're looking for.

In summary, you need 3 things: clickable, focusable, and onClickListener:

    CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01);    chkBox.setOnClickListener(new View.OnClickListener() {        public void onClick(View v)        {            ((CheckedTextView) v).toggle();        }    });

and layout file:

<CheckedTextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/CheckedTextView01"    android:checked="true"    android:clickable="true"    android:focusable="true"    android:text="Label on Left Side of Checkbox."    />


You probably want to just use a regular CheckBox (which inherits from Button and thus TextView). CheckedTextView is designed to work with list views. Example CheckBox layout XML is below:

<CheckBox    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="Pop up a message when new data available"    android:textSize="16dip" />


You can use and toggle CheckedTextView by the following way:

In layout:

<CheckedTextView        android:id="@+id/cv_id"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Some text here"         android:textSize="18sp"        android:gravity="center_vertical"        android:clickable="true"        android:checkMark="@drawable/btn_check_off"        android:focusable="true"        android:checked="false"        android:onClick="toggle"/>

In your activity:

public void toggle(View v){    CheckedTextView cView = (CheckedTextView) v.findViewById(R.id.cv_file_name);        if (cView.isSelected())        {            cView.setSelected(false);            cView.setCheckMarkDrawable (R.drawable.btn_check_off);        }        else        {            cView.setSelected(true);            cView.setCheckMarkDrawable (R.drawable.btn_check_on);        }}

And don't forget to put drawables. I get it from SDK ...\android-sdk-windows\platforms\android-10\data\res\drawable-mdpi\