Pregunta

Al principio yo quería una marca de verificación donde se coloca el texto a la izquierda de la marca de verificación. Después de buscar en este sitio descubrí la mejor solución es androide: CheckedTextView? Sin embargo, descubrí que la marca de verificación no se puede cambiar manualmente por los usuarios. Es por diseño?

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/autoupdatecheckboxview" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:gravity="center_vertical" 
 android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
 android:paddingLeft="6dip" 
 android:paddingRight="6dip" 
 android:text="Pop up a message when new data available" 
 android:typeface="sans" android:textSize="16dip"/> 
¿Fue útil?

Solución

Es posible que desee utilizar simplemente un habitual CheckBox (que hereda de Button y por lo tanto TextView). CheckedTextView está diseñado para trabajar con vistas de lista. Ejemplo de composición CheckBox XML es el siguiente:

<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" />

Otros consejos

Es posible, y algo fácil de poner en práctica lo que busca. Sí, CheckedTextView se utiliza principalmente para tener una visión única Checkable en la fila de un ListView, que controla los estados checkable de sus niños usando choiceMode. Sin embargo, desde CheckBox no parece apoyar una casilla de verificación alineado a la derecha en su propia, y CheckedTextView es una casilla de verificación alineado a la derecha, tiene sentido querer utilizar lo que hay.

Debido a ListView controla el estado de activación de un elemento de la lista, el propio CheckedTextView no responde a los eventos de clic, y no se puede hacer clic o enfocable por defecto. Lo hace responder a los Estados prensadas y se centró, sin embargo - que significa que puede recibir el foco y haga clic en eventos, y parece ser correcta en cuanto a una casilla de verificación debe mirar. Lo único que falta es que no lo hace alternar su estado activado al hacer clic. Por lo tanto, un OnClickListener rápida que las llamadas .toggle() le dará el resultado final que usted está buscando.

En resumen, necesita 3 cosas: se puede hacer clic, enfocable, y OnClickListener:

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

y archivo de diseño:

<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."
    />

Puede usar y alternar CheckedTextView de la siguiente manera:

En el diseño:

<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"/>

En su actividad:

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);
        }
}

Y no se olvide de poner dibujables. Lo entiendo de SDK ... \ android-sdk-windows \ plataformas \ android-10 \ data \ res \ dibujable-mdpi \

respuesta simple es el uso:. isChecked() método en lugar de isSelected()

CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.CheckedTextView01);
chkBox.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v)
    {
        if(((CheckedTextView) v).isChecked()){
            ((CheckedTextView) v).setChecked(false);
        }else{
            ((CheckedTextView) v).setChecked(true);            
        }
    }
});

y obtener el estado utilizando el método view.isChecked().

En este diseño se ve y se comporta de la misma manera como CheckedTextView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?attr/dropdownListPreferredItemHeight"
    android:gravity="center_vertical" >

    <TextView
        android:id="@android:id/text1"
        style="?android:attr/spinnerDropDownItemStyle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ellipsize="marquee"
        android:singleLine="true" />

    <CheckBox
        android:id="@android:id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="false"
        android:duplicateParentState="true"
        android:focusable="false" />

</LinearLayout>

Sólo trabajo de campo adicional es establecer un OnClickListener en la vista raíz y checkBox.toggle() llamada en el CheckBox.

Aquí está mi uso en SingleChoiceDialog

1.select_dialog_singlechoice.xml

<?xml version="1.0" encoding="UTF-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="@style/PopupSelectList"
    android:checkMark="@drawable/radio"
    android:ellipsize="marquee"
    android:gravity="center_vertical"
    android:paddingLeft="12.0dip"
    android:paddingRight="10.0dip" />

2.style.xml

<style name="PopupSelectList">
    <item name="android:textSize">16.0sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:background">@drawable/list_item_selector</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:minHeight">@dimen/dialog_select_height</item>
</style>

3.ratio.xml

<?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/dot_selected" android:state_checked="true" android:state_window_focused="false"/>
    <item android:drawable="@drawable/dot_normal" android:state_checked="false" android:state_window_focused="false"/>
    <item android:drawable="@drawable/dot_normal" android:state_checked="false"/>
    <item android:drawable="@drawable/dot_selected" android:state_checked="true"/>
</selector>

getView adaptador de 4.In

CheckedTextView title = (CheckedTextView) convertView
                .findViewById(android.R.id.text1);
        title.setText(mItems[position]);
        title.setSelected(mCheckedItem == position ? true : false);
                    title.setCheckMarkDrawable(position == mCheckedItem ?                   R.drawable.dot_selected
                : R.drawable.dot_normal);

Si desea más control preciso sobre la etiqueta y la casilla de verificación, otra alternativa es utilizar RelativeLayout y el atributo android: layout_alignParentRight:

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/my_checkbox_label" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="my checkbox label" />
    <CheckBox
        android:id="@+id/my_checkbox" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />
</RelativeLayout>

A continuación, se puede ajustar el margen / etc de la TextView y casilla de verificación para que se adapte a sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top