Comment puis-je créer ColorStateList par programme?

J'essaie de créer un ColorStateList aide de ceci:

 ColorStateList stateList = new ColorStateList(states, colors); 

Mais je ne suis pas sûr de quels sont les deux paramètres.

  • Google Maps SDK avec nouvel émulateur Intel Atom x86
  • Création de la disposition personnalisée du clavier Android
  • Arrêt des tentatives silencieuses dans HttpURLConnection
  • RelativeLayout zorder lollipop
  • Définir alpha sur ImageView sans setAlpha
  • Comment vérifier si une classe existe quelque part dans un paquet?
  • Selon la documentation:

     public ColorStateList (int[][] states, int[] colors) 

    Ajouté au niveau API 1

    Crée une ColorStateList qui renvoie le mappage spécifié des états aux couleurs.

    Quelqu'un peut-il m'expliquer comment créer cela?

    Quel est le sens du tableau bidimensionnel pour les états?

  • Débogage d'applications Android sur Dell Venue 7 à l'aide d'Eclipse
  • Changement d'Android de l'action flottante Couleur du bouton
  • Rétroviseur horizontal Android
  • Les tests consécutifs Android Junit ne reflètent pas les données réelles dans la base de données sous-jacente
  • ANDROID: Comment mettre un délai après la poussée d'un bouton?
  • IllegalStateException avec PagerAdapter
  • 5 Solutions collect form web for “Comment puis-je créer ColorStateList par programme?”

    Voir http://developer.android.com/reference/android/R.attr.html#state_above_anchor pour une liste des états disponibles.

    Si vous souhaitez définir des couleurs pour les états désactivés, déphasés, non contrôlés, etc., veuillez simplement annuler les états:

     int[][] states = new int[][] { new int[] { android.R.attr.state_enabled}, // enabled new int[] {-android.R.attr.state_enabled}, // disabled new int[] {-android.R.attr.state_checked}, // unchecked new int[] { android.R.attr.state_pressed} // pressed }; int[] colors = new int[] { Color.BLACK, Color.RED, Color.GREEN, Color.BLUE }; ColorStateList myList = new ColorStateList(states, colors); 

    La première dimension est un ensemble d'ensembles d'états, le second est l'état défini. Le tableau des couleurs répertorie les couleurs pour chaque ensemble d'état correspondant, donc la longueur du tableau des couleurs doit correspondre à la première dimension du tableau des états (ou il se bloque lorsque l'état est "utilisé"). Voici et exemple:

     ColorStateList myColorStateList = new ColorStateList( new int[][]{ new int[]{android.R.attr.state_pressed}, //1 new int[]{android.R.attr.state_focused}, //2 new int[]{android.R.attr.state_focused, android.R.attr.state_pressed} //3 }, new int[] { Color.RED, //1 Color.GREEN, //2 Color.BLUE //3 } ); 

    J'espère que cela t'aides.

    Exemple EDIT: une liste d'états de couleur xml comme:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="@color/white"/> <item android:color="@color/black"/> </selector> 

    Ressemblerait à ça

     ColorStateList myColorStateList = new ColorStateList( new int[][]{ new int[]{android.R.attr.state_pressed}, new int[]{} }, new int[] { context.getResources().getColor(R.color.white), context.getResources().getColor(R.color.black) } ); 

    Malheureusement, aucune des solutions ne fonctionne pour moi.

    1. Si vous ne définissez pas l'état pressé, cela ne le détectera pas.
    2. Si vous le configurez, vous devez définir l'état vide pour ajouter une couleur par défaut
     ColorStateList themeColorStateList = new ColorStateList( new int[][]{ new int[]{android.R.attr.state_pressed}, new int[]{android.R.attr.state_enabled}, new int[]{android.R.attr.state_focused, android.R.attr.state_pressed}, new int[]{-android.R.attr.state_enabled}, new int[]{} // this should be empty to make default color as we want }, new int[]{ pressedFontColor, defaultFontColor, pressedFontColor, disabledFontColor, defaultFontColor } ); 

    Malheureusement, aucune des solutions ne fonctionne pour moi.

    1. Si vous ne définissez pas l'état pressé, cela ne le détectera pas.
    2. Si vous le configurez, vous devez définir l'état vide pour ajouter une couleur par défaut

    Ceci est un constructeur à partir du code source:

     /** * Creates a ColorStateList that returns the specified mapping from * states to colors. */ public ColorStateList(int[][] states, int[] colors) { mStateSpecs = states; mColors = colors; if (states.length > 0) { mDefaultColor = colors[0]; for (int i = 0; i < states.length; i++) { if (states[i].length == 0) { mDefaultColor = colors[i]; } } } } 

    Si vous utilisez la ressource Colors.xml

     int[] colors = new int[] { getResources().getColor(R.color.ColorVerificaLunes), getResources().getColor(R.color.ColorVerificaMartes), getResources().getColor(R.color.ColorVerificaMiercoles), getResources().getColor(R.color.ColorVerificaJueves), getResources().getColor(R.color.ColorVerificaViernes) }; ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{colors[0]}); example.setBackgroundTintList(csl); 

    Parfois, ce sera suffisant:

     int colorInt = getResources().getColor(R.color.ColorVerificaLunes); ColorStateList csl = ColorStateList.valueOf(colorInt); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.