Im Allgemeinen können Sie Stile nicht programmgesteuert ändern. Sie können das Aussehen eines Bildschirms, eines Teils eines Layouts oder einer einzelnen Schaltfläche in Ihrem XML-Layout mithilfe von Themen oder Stilen festlegen . Themen können jedoch programmgesteuert angewendet werden .
Es gibt auch so etwas wie ein, mit StateListDrawable
dem Sie verschiedene Zeichen für jeden Zustand definieren Button
können, in dem Sie sich befinden können, ob fokussiert, ausgewählt, gedrückt, deaktiviert und so weiter.
Damit Ihre Schaltfläche beim Drücken die Farbe ändert, können Sie beispielsweise eine XML-Datei mit dem Namen " res/drawable/my_button.xml
Verzeichnis" wie folgt definieren:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/btn_pressed" />
<item
android:state_pressed="false"
android:drawable="@drawable/btn_normal" />
</selector>
Sie können diesen Selektor dann auf a anwenden, Button
indem Sie die Eigenschaft festlegen android:background="@drawable/my_button"
.
style
Attribut nicht ändern , aber Sie können den Hintergrund einesButton
ähnlichen Programms wie bei jeder anderen Ansicht programmgesteuert festlegen , wenn dies ausreicht. AlsButton
Erbe vonTextView
können Sie auch die Texteigenschaften ändern. Schauen Sie sich einfach die API-Dokumentation für diese Elemente an ... developer.android.com/reference/android/view/…Zunächst müssen Sie keinen Layout-Inflater verwenden, um einen einfachen Button zu erstellen. Sie können einfach verwenden:
Wenn Sie die Schaltfläche formatieren möchten, haben Sie zwei Möglichkeiten: Am einfachsten ist es, alle Elemente im Code anzugeben, wie viele der anderen Antworten vermuten lassen:
Die andere Option besteht darin, den Stil in XML zu definieren und auf die Schaltfläche anzuwenden. Im allgemeinen Fall können Sie a
ContextThemeWrapper
dafür verwenden:Um die textbezogenen Attribute in einer Textansicht (oder deren Unterklassen wie Button) zu ändern, gibt es eine spezielle Methode:
Letzteres kann nicht zum Ändern aller Attribute verwendet werden. Um beispielsweise die Polsterung zu ändern, müssen Sie a verwenden
ContextThemeWrapper
. Aber für Textfarbe, Größe usw. können Sie verwendensetTextAppearance
.quelle
Ja, Sie können zum Beispiel in einer Schaltfläche verwenden
quelle
Sie können Stilattribute wie folgt erstellen:
anstelle von:
quelle
Wenn Sie die Support-Bibliothek verwenden, können Sie diese einfach verwenden
für Textansichten und Schaltflächen. Es gibt ähnliche Klassen für den Rest der Ansichten :-)
quelle
Für alle, die nach einer Materialantwort suchen, lesen Sie diesen SO-Beitrag: Farbschaltflächen in Android mit Material Design und AppCompat
Ich habe eine Kombination dieser Antwort verwendet, um die Standardtextfarbe der Schaltfläche für meine Schaltfläche auf Weiß festzulegen: https://stackoverflow.com/a/32238489/3075340
Dann diese Antwort https://stackoverflow.com/a/34355919/3075340 , um die Hintergrundfarbe programmgesteuert festzulegen. Der Code dafür lautet:
your_colored_button
kann nur eine normaleButton
oder eine AppCompat-Schaltfläche sein, wenn Sie möchten - ich habe den obigen Code mit beiden Arten von Schaltflächen getestet und es funktioniert.EDIT: Ich habe festgestellt, dass Pre-Lollipop-Geräte mit dem obigen Code nicht funktionieren. In diesem Beitrag erfahren Sie, wie Sie Unterstützung für Pre-Lollipop-Geräte hinzufügen: https://stackoverflow.com/a/30277424/3075340
Grundsätzlich tun Sie dies:
quelle
Abhängig davon, welche Stilattribute Sie ändern möchten, können Sie möglicherweise die Pariser Bibliothek verwenden:
Viele Attribute wie Hintergrund, Auffüllen, Textgröße, Textfarbe usw. werden unterstützt.
Haftungsausschluss: Ich habe die Bibliothek verfasst.
quelle
Die Antwort von @Dayerman und @h_rules ist richtig. Um ein ausführliches Beispiel mit Code zu geben, erstellen Sie im Zeichenordner eine XML-Datei mit dem Namen button_disabled.xml
Dann in Java,
Dadurch wird die Eigenschaft der Schaltfläche deaktiviert und die Farbe auf Silber gesetzt.
[Die Farbe ist in color.xml wie folgt definiert:
quelle
Zur Laufzeit wissen Sie, welchen Stil Ihre Schaltfläche haben soll. Zuvor können Sie in XML im Layoutordner alle sofort einsatzbereiten Schaltflächen mit den von Ihnen benötigten Stilen bereitstellen. Im Layoutordner befindet sich möglicherweise eine Datei mit dem Namen: button_style_1.xml. Der Inhalt dieser Datei könnte folgendermaßen aussehen:
Wenn Sie mit Fragmenten arbeiten, wird diese Schaltfläche in onCreateView wie folgt aufgeblasen:
Dabei ist Container der ViewGroup-Container, der der onCreateView-Methode zugeordnet ist, die Sie beim Erstellen Ihres Fragments überschreiben.
Benötigen Sie noch zwei solcher Tasten? Sie erstellen sie folgendermaßen:
Sie können diese Schaltflächen anpassen:
Anschließend fügen Sie dem Layout-Container, den Sie auch in der onCreateView-Methode aufgeblasen haben, Ihre benutzerdefinierten, stilisierten Schaltflächen hinzu:
Und so können Sie dynamisch mit stilisierten Schaltflächen arbeiten.
quelle
Ich habe dafür eine Hilfsschnittstelle mit dem Haltermuster erstellt.
Implementieren Sie nun für jeden Stil, den Sie pragmatisch verwenden möchten, einfach die Benutzeroberfläche, zum Beispiel:
Deklarieren Sie ein Stylable in Ihrem
attrs.xml
, das Stylable für dieses Beispiel lautet:Hier ist der Stil deklariert in
styles.xml
:Und schließlich die Implementierung des Style-Inhabers:
Ich fand dies sehr hilfreich, da es leicht wiederverwendet werden kann und den Code sauber und ausführlich hält. Ich würde empfehlen, dies nur als lokale Variable zu verwenden, damit der Garbage Collector seine Arbeit erledigen kann, sobald wir alle Stile festgelegt haben .
quelle
Ich hatte kürzlich das gleiche Problem. Hier ist, wie ich es gelöst habe.
Vielen Dank !
quelle