Android crear selector mediante programación

¿Cómo puedo crear el selector de forma programática?
Tengo un selector de xml que se asigna a TabWidget como el Tab indicator color

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/bg_tab_unselected" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/bg_tab_selected" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/bg_tab_unselected_focused" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/bg_tab_selected_focused" /> <!-- Pressed --> <!-- Non focused states --> <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/bg_tab_unselected_pressed" /> <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/bg_tab_selected_pressed" /> <!-- Focused states --> <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/bg_tab_unselected_pressed" /> <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/bg_tab_selected_pressed" /> </selector> 

¿Hay alguna manera de crear el código xml anterior dinámicamente?

2 Solutions collect form web for “Android crear selector mediante programación”

Puedes usarlo así:

 public static StateListDrawable makeSelector(int color) { StateListDrawable res = new StateListDrawable(); res.setExitFadeDuration(400); res.setAlpha(45); res.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(color)); res.addState(new int[]{}, new ColorDrawable(Color.TRANSPARENT)); return res; } 

y entonces:

 view.setBackground(makeSelector(Color.RED)); 

Puede crear el StateListDrawable directamente y utilizar addState para agregar los estados que ha definido en XML:

 StateListDrawable d = new StateListDrawable(); [...] int[] sFocusedSelected = { android.R.attr.state_focused, android.R.attr.state_selected }; Drawable dFocusedSelected = getDrawable(R.drawable.bg_tab_selected_focused); d.addState(sFocusedSelected, dFocusedSelected); [...] 

Se aplican las mismas reglas que para XML :

La selección no se basa en el "mejor partido", sino simplemente en el primer elemento que cumple los criterios mínimos del estado.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.