2015-08-26 13 views
12

Wie kann ich Selektor programmgesteuert erstellen?
Ich habe einen XML-Selektor, dieAndroid Selektor programmgesteuert erstellen

<?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> 

Gibt es eine Möglichkeit zu TabWidget als Tab indicator color dynamisch zugewiesen über XML-Code zu erstellen?

+2

siehe 'StateListDrawable' – pskink

Antwort

2

können Sie die StateListDrawable direkt erstellen und verwenden addState für das Hinzufügen der Zustände Sie in XML definiert haben:

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

[...] 

gleichen Regeln wie für die Anwendung XML:

Die Auswahl basiert nicht auf ist die "beste Übereinstimmung", sondern einfach der erste Punkt, der die Mindestkriterien des Staates erfüllt.

26

können Sie es wie folgt verwenden:

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

und dann:

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

Danke auch für zusätzliche Alpha und fade out-Setter! – JerabekJakub

Verwandte Themen