setchecked - que es checkbox android studio
android: ¿CheckedTextView no se puede verificar? (7)
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>
4. En el getView del adaptador
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);
Inicialmente, quería una marca de verificación donde el texto se coloca a la izquierda de la marca de verificación. Después de buscar en este sitio, descubrí que la mejor solución alternativa es android: CheckedTextView? Sin embargo, descubrí que los usuarios no pueden cambiar la marca de verificación manualmente. ¿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"/>
Es posible y algo simple implementar lo que está buscando. Sí, CheckedTextView
se usa principalmente para tener una sola vista seleccionable en la fila de un ListView
, que controla los estados verificables de sus hijos usando choiceMode
. Sin embargo, dado que CheckBox no parece admitir una casilla de verificación alineada a la derecha por sí misma, y CheckedTextView es una casilla de verificación alineada a la derecha, tiene sentido querer usar lo que está allí.
Debido a que ListView controla el estado comprobado de un elemento de la lista, CheckedTextView por sí mismo no responde a los eventos de clic, y no se puede hacer clic o se puede enfocar de manera predeterminada. Sin embargo, responde a estados presionados y enfocados, lo que significa que puede recibir eventos de enfoque y clic, y se ve correcto en la medida en que debería verse una casilla de verificación. Lo único que falta es que no alternar su estado verificado al hacer clic. Por lo tanto, un OnClickListener rápido que llama a .toggle()
le dará el resultado final que está buscando.
En resumen, necesita 3 cosas: cliqueable, 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."
/>
Este diseño se ve y se comporta de la misma manera que 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>
Solo un trabajo extra es establecer un OnClickListener
en la vista raíz y llamar a checkBox.toggle()
en el CheckBox
.
La respuesta simple es usar: el método isChecked()
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 usando el método view.isChecked()
.
Probablemente desee utilizar un CheckBox
normal (que hereda de Button
y, por lo tanto, TextView
). CheckedTextView
está diseñado para trabajar con vistas de lista. Ejemplo de XML de diseño de CheckBox
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" />
Puede usar y alternar CheckedTextView de la siguiente manera:
En 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 tu 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 te olvides de poner drawables. Lo obtengo de SDK ... / android-sdk-windows / platforms / android-10 / data / res / drawable-mdpi /
Si desea un control más detallado sobre la etiqueta y la casilla de verificación, otra alternativa es usar 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, puede ajustar el margen / etc de la vista de texto y la casilla de verificación para satisfacer sus necesidades.