Angenommen, es gibt 2 ImageButtons.Now, um das Bild basierend auf seinem Zustand anzuzeigen, sollte ich einen Selektor xml für jeden der ImageButton schreiben. Können wir einen Selektor für beide Views schreiben? Weil meine App viele Buttons hat und für jede View einen Selector XML schreiben muss. Können wir es optimieren?Android: Wie man denselben ziehbaren Selektor xml für mehr als 2 Ansichten setzt
Antwort
Wenn Sie es mit XML-Datei versuchen, dann müssen Sie jeden Selektor für jede Schaltfläche erstellen.
So versuchen, dynamisch zu tun, indem entweder die StateListDrawable Subklassen oder den Code unten versuchen, die dynamisch Selektor erzeugt :::
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.pressed));
states.addState(new int[] {android.R.attr.state_focused},
getResources().getDrawable(R.drawable.focused));
states.addState(new int[] { },
getResources().getDrawable(R.drawable.normal));
imageView.setImageDrawable(states);
Sie müssen keine XML-Wähler für jede Ihrer Schaltflächen erstellen, einfach Verwenden Sie den, der passt. Ich verwende den folgenden Code in meinem Projekt für viele Schaltflächen mit dem Selektor und anderen Attributen, die identisch sind.
<LinearLayout android:id="@+id/group_news" style="@style/main_button_group" >
<ImageView android:id="@+id/image_news" style="@style/main_button_image" android:src="@drawable/news" />
<TextView android:id="@+id/text_news" style="@style/main_button_text" android:text="@string/button_news" />
</LinearLayout>
(Anmerkung: Ich benutze ein Linearlayout mit einem Image und einen Textview und nicht einem Textview mit dem drawableLeft Attribute, weil ich die Bilder im Code bin ersetzen Ändern der drawableLeft nicht richtig funktioniert.)
Und dann ein styles.xml in den res erstellen \ Werte Ordner mit allen attribures, die gleich für die Tasten wie sind:
<resources>
<style name="main_button_group">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:orientation">horizontal</item>
<item name="android:layout_marginTop">2dp</item>
<item name="android:paddingTop">10dp</item>
<item name="android:paddingBottom">10dp</item>
<item name="android:paddingRight">10dp</item>
<item name="android:paddingLeft">25dp</item>
<item name="android:background">@drawable/main_button_states</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
</style>
<style name="main_button_image">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:contentDescription">@string/empty</item>
</style>
<style name="main_button_text">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">10dp</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:textSize">20dp</item>
<item name="android:textColor">@color/general_value</item>
</style>
</resources>
der Selektor @ ziehbar/main_button_states sieht wie folgt aus:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/main_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/main_button_focused" />
<item android:state_hovered="true" android:drawable="@drawable/main_button_focused" />
<item android:drawable="@drawable/main_button_normal" />
</selector>
Dies funktioniert perfekt.
Aber wir müssen alle Selektoren separat rechts erstellen.Was ich frage, gibt es eine Möglichkeit, alle Selektor-Codes in einer einzigen Datei oder auf irgendeine Weise zu schreiben, sie wiederzuverwenden. –
@DileepPerla, jeder Selektor ist in seiner separaten Datei. Sie identifizieren sie mit dem Dateinamen (_ @ drawable/main_button_states_ ist die Datei _main_button_states.xml_ im Ordner _drawable_) – infero
Ich habe es. Der Aufruf der Selektor-XML ist für mich kein Problem. Ich wollte nur die Anzahl der Selektor-XML-Dateien optimieren. –
- 1. Android XML-Selektor für Layouts
- 2. Android Multiple-Stroke-Box in ziehbaren Xml
- 3. non-xml Android Ansichten
- 4. UITabBarController - mehr als 20 Ansichten
- 5. Xml Selektor Typ Frage
- 6. Wie man mehr als 2 Tabelle mit SQL-Abfrage verbinden?
- 7. Wie verweist man auf mehr als 1 Layout in Android?
- 8. Wie setzt man "android: scrollbars = vertical" programmatisch?
- 9. DIFF-Dienstprogramm funktioniert für 2 Dateien. Wie kann man mehr als 2 Dateien gleichzeitig vergleichen?
- 10. Wie man mehr als 2 DOM-Objekte mit jQuery zusammenführen?
- 11. Wie verkettet man mehr als 2 Felder mit SQL?
- 12. Wie setzt man die Sichtbarkeit GONE wie Android in IOS?
- 13. AngularJs Wie mehrere Ansichten haben (mehr als 2) und jede Ansicht mehr als einen Zustand (mit Tabs)
- 14. Selen: wie mehr als 2 Ausnahme ignorieren
- 15. AngularJS - Wie macht man einen ziehbaren Baum?
- 16. Android Verknüpfung mehr als ein XML zu Java-Klasse-Datei
- 17. Angular 2 Verwenden Tag Div als Selektor für Komponente
- 18. Android Textfarbe Selektor
- 19. MySQL Vorkommen zählen mehr als 2
- 20. Android - Wie setzt man einen Hintergrundtext in einen EditText?
- 21. spielen 2 verschiedene Pakete für Ansichten
- 22. android- Wie setze ich 2 xml für LinearLayout zeichnen
- 23. Wie setzt man Standardwerte für Tcl-Variablen?
- 24. Wie man Generatorausdrücke als Eingabe in Pythons Join-Methode setzt?
- 25. Wie man EditText Höhe dynamisch setzt
- 26. Android Selektor programmgesteuert erstellen
- 27. Android: Wie Selektor für den Hintergrund eines TextView verwenden?
- 28. XML Bedingte Zuweisung für mehr als eine Bedingung
- 29. Inline bedingte zwischen mehr als 2 Werte
- 30. Wie setzt man den Hintergrund der Zellen?
Vielen Dank für die Lösung. –
Funktioniert gut; Ebenso wie im XML können Zustände kombiniert und negiert werden (mit einem "-"). so gedrückt = true checked = false übersetzt in: states.addState (new int [] {android.R.attr.state_pressed, -android.R.attr.state_checked}); Siehe: http://StackOverflow.com/questions/5092649 –
groß ..! Gibt es eine Liste der Staaten, die für andriod.R.attr. * zur Verfügung stehen? –