2010-08-16 19 views

Respuesta

6

Si nos fijamos en la styles.xml from android system, se verá que el estilo de casilla se define como sigue:

<style name="Widget.CompoundButton.CheckBox"> 
    <item name="android:background">@android:drawable/btn_check_label_background</item> 
    <item name="android:button">@android:drawable/btn_check</item> 
</style> 

Y Se busca los recursos de la sistema, verá que btn_check es un selector dibujable con 2 estados (activado/desactivado) con el cheque de color verde o no.
Así que si usted quiere tener su propio color embutición, aquí es lo que debe hacer:
- crear un styles.xml
- 2 definen los dibujables a utilizar
- crear el archivo XML apoyar el selector

puede encontrar la documentación completa bastante detallado en the android google doc.

+0

Hola, todavía no pude tener éxito en la implementación de la solución. – Karthik

+0

¿Puedes ayudarme con un poco más de información sobre lo mismo? He pegado un archivo java de muestra para el mismo. Por favor, ayúdenme en lo que necesito hacer exactamente para que mi casilla de verificación cambie de color a otro color en lugar de rojo. – Karthik

+0

AlertDialog.Builder checkbox_dialog = new AlertDialog.Builder ( \t \t \t \t \t DialogCheckBox.this); \t checkbox_dialog.setTitle ("El título principal va aquí"); \t \t \t \t \t \t checkbox_dialog.setMultiChoiceItems (myitems, choiceitems, \t \t \t \t \t nueva DialogInterface.OnMultiChoiceClickListener() { onClick (de diálogo DialogInterface public void \t \t \t \t \t \t, int, que, \t \t \t \t \t \t \t \t booleano isChecked) { \t \t \t \t \t \t \t Log.d ("TAG", "elementos seleccionados"); \t \t \t \t \t \t} \t \t \t \t \t}); – Karthik

1

para cambiar la casilla de verificación dentro de un cuadro de diálogo de selección múltiple, se necesita un adaptador personalizado para su diálogo, a fin de tener acceso a los puntos de vista de la lista. Luego, llame al método setCheckMarkDrawable de la clase CheckedTextView.

Aquí se muestra un ejemplo:

Alert dialog with custom checkboxes

Archivo default_checkbox.xml dentro res/drawable

<?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/checkbox_checked" /> <!-- checked --> 

    <item android:state_pressed="true" 
     android:drawable="@drawable/checkbox_checked" /> <!-- pressed --> 

    <item android:drawable="@drawable/checkbox_default" /> <!-- default --> 

</selector> 

Archivo DialogUtil.java

package example.dialog; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.util.Log; 
import android.view.*; 
import android.widget.*; 
import android.widget.AdapterView.OnItemClickListener; 

public class DialogUtil { 

    private DialogUtil() { 
    } 

    public static AlertDialog show(Context context) { 
     String[] items = {"text 1", "text 2", "text 3"}; 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setTitle("Test") 
      .setPositiveButton("OK", null) 
      .setAdapter(new CustomAdapter(context, items), null); 
     AlertDialog dialog = builder.show(); 

     ListView list = dialog.getListView(); 
     list.setItemsCanFocus(false); 
     list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     list.setOnItemClickListener(listener); 
     return dialog; 
    } 

    private static OnItemClickListener listener = new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.i("DialogUtil", "Clicked on " + view); 
     } 
    }; 

    private static class CustomAdapter extends ArrayAdapter<String> { 

     public CustomAdapter(Context context, String[] array) { 
      super(context, android.R.layout.simple_list_item_multiple_choice, array); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = super.getView(position, convertView, parent); 
      if (view instanceof CheckedTextView) { 
       CheckedTextView checkedView = (CheckedTextView) view; 
       checkedView.setCheckMarkDrawable(R.drawable.default_checkbox); 
      } 
      return view; 
     } 
    } 
} 

NOTA: Si simplemente usa AlertDialog, antes de obtener el ListView, llame al show, en primer lugar, como se explicó anteriormente.

Sin embargo, si se utiliza DialogFragment y onCreateDialog, se obtiene la ListView, dentro onStart.

Cuestiones relacionadas