Hier ist XML:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/LightStyle"
android:layout_width="fill_parent"
android:layout_height="55dip"
android:clickable="true"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
</RelativeLayout>
Wie setze style
ich Attribute programmgesteuert?
Antworten:
Technisch gesehen können Sie Stile programmgesteuert anwenden, mit benutzerdefinierten Ansichten:
Der Konstruktor mit einem Argument wird verwendet, wenn Sie Ansichten programmgesteuert instanziieren.
Verketten Sie diesen Konstruktor also mit dem Super, der einen Stilparameter verwendet.
Oder wie @Dori einfach betonte:
quelle
http://developer.android.com/reference/android/widget/LinearLayout.html#LinearLayout(android.content.Context, android.util.AttributeSet, int)
. Mit LinearLayout ist Level 11+ erforderlich.AttributeSet
?Button
. @ Benjamin Piette Ansatz funktioniert gut.Was hat bei mir funktioniert:
UND
quelle
Update : Zum Zeitpunkt der Beantwortung dieser Frage (Mitte 2012, API-Ebene 14-15) war das programmgesteuerte Festlegen der Ansicht keine Option (obwohl es einige nicht triviale Problemumgehungen gab), obwohl dies nach der neueren API möglich war Veröffentlichungen. Siehe @ Blundells Antwort für Details.
ALTE Antwort:
Sie können den Stil einer Ansicht noch nicht programmgesteuert festlegen, aber dieser Thread ist möglicherweise hilfreich.
quelle
textView.setTextAppearance(context, R.style.mystyle);
. Laut Dokument "Legt die Textfarbe, Größe, den Stil, die Hinweisfarbe und die Hervorhebungsfarbe aus der angegebenen TextAppearance-Ressource fest." developer.android.com/reference/android/widget/… , int)Für eine neue Button / TextView:
Für eine vorhandene Instanz:
Für Bilder oder Layouts:
quelle
Wenn Sie weiterhin XML verwenden möchten (was die akzeptierte Antwort nicht zulässt) und den Stil festlegen möchten, nachdem die Ansicht erstellt wurde, können Sie möglicherweise die Pariser Bibliothek verwenden, die eine Teilmenge aller verfügbaren Attribute unterstützt.
Da Sie Ihre Ansicht aus XML aufblasen, müssen Sie im Layout eine ID angeben:
Wenn Sie dann den Stil programmgesteuert ändern müssen, nachdem das Layout aufgeblasen wurde:
Weitere Informationen: Die Liste der unterstützten Ansichtstypen und -attribute (einschließlich Hintergrund, Abstand, Rand usw., die problemlos erweitert werden können) und Installationsanweisungen mit zusätzlicher Dokumentation .
Haftungsausschluss: Ich bin der ursprüngliche Autor dieser Bibliothek.
quelle
Sie können Ihrer Aktivität einen Stil zuweisen, indem Sie Folgendes tun:
oder Android Standard:
in Ihrer Tätigkeit vor
setContentView()
.quelle
Keine der angegebenen Antworten ist korrekt.
Sie können den Stil programmgesteuert festlegen.
Kurze Antwort ist einen Blick darauf http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/content/Context.java#435
Lange Antwort. Hier ist mein Snippet, um einen benutzerdefinierten Stil programmgesteuert auf Ihre Ansicht festzulegen:
1) Erstellen Sie einen Stil in Ihrer Datei styles.xml
Vergessen Sie nicht, Ihre benutzerdefinierten Attribute in der Datei attrs.xml zu definieren
Meine attrsl.xml-Datei:
Beachten Sie, dass Sie einen beliebigen Namen für Ihr Stylable verwenden können (mein CustomWidget).
Jetzt können Sie den Stil programmgesteuert auf das Widget einstellen. Hier ist mein einfaches Widget:
Layout:
Und schließlich die Implementierung der StyleLoader-Klasse
Ein voll funktionsfähiges Beispiel finden Sie unter https://github.com/Defuera/SetStylableProgramatisch
quelle
apply
Methode, die nichts Interessantes bewirkt. Die wahre Bedeutung von Stil ist, dass er automatisch einen visuellen Stil auf alle zukünftigen dynamisch hinzugefügten Ansichten anwendet. Dieser Code hier kann das natürlich nicht und es gibt hier nichts Dynamisches. Wir müssen wissen, welche Ansichten und welche Eigenschaften / Felder festgelegt werden sollen.Dies ist eine ziemlich alte Frage, aber die Lösung, die jetzt für mich funktioniert hat, besteht darin, den 4. Parameter des Konstruktors zu verwenden
defStyleRes
- falls verfügbar ... in der Ansicht ... um den Stil festzulegenFolgende Arbeiten für meine Zwecke (Kotlin):
quelle
Dies ist mein einfaches Beispiel. Der Schlüssel ist der
ContextThemeWrapper
Wrapper. Ohne ihn funktioniert mein Stil nicht und der Konstruktor mit drei Parametern der Ansicht wird verwendet.quelle
Der einfache Weg führt durch den Konstruktor
quelle
Ich schlage nicht vor, ContextThemeWrapper so zu verwenden:
Was kann zu unerwünschten Ergebnissen in Ihrer Anwendung führen? Stattdessen schlage ich dafür eine neue Bibliothek "Paris" von Ingenieuren bei Airbnb vor:
https://github.com/airbnb/paris
Aber nach einiger Zeit habe ich herausgefunden, dass es tatsächlich ziemlich begrenzt ist und ich habe aufgehört, es zu verwenden, weil es nicht viele Eigenschaften unterstützt, die ich sofort brauche, also muss man wie immer auschecken und entscheiden.
quelle
Ich habe in meiner zusammengesetzten ViewGroup in XML definierte Ansichten verwendet und sie der Viewgroup hinzugefügt. Auf diese Weise kann ich den Stil nicht dynamisch ändern, aber ich kann einige Stilanpassungen vornehmen. Mein Composite:
}}
und meine Ansicht in XML, wo ich Stile zuweisen kann:
quelle
Sie können die XML erstellen , das Layout mit dem gewünschten Stil enthält , und ändern Sie dann den Hintergrund Ressource Ihrer Ansicht, wie diese .
quelle