Ich versuche das zu benutzen TextView
Konstruktor mit einem Stil wie diesem zu verwenden:
TextView myText = new TextView(MyActivity.this, null, R.style.my_style);
Wenn ich dies tue, scheint die Textansicht jedoch nicht den Stil zu übernehmen (ich habe den Stil überprüft, indem ich ihn für ein statisches Objekt festgelegt habe).
Ich habe es auch versucht, myText.setTextAppearance(MyActivity.this, R.style.my_style)
aber es funktioniert auch nicht.
Sie können einen generischen Stil erstellen und ihn in mehreren Textansichten wie der folgenden wiederverwenden:
Bearbeiten: Dies bezieht sich auf den Kontext
quelle
TextViewCompat.setTextAppearance
Sie können einen ContextThemeWrapper wie folgt an den Konstruktor übergeben:
quelle
<style name="TabButton"><item name="android:background">@drawable/tabbar_button_bkgnd</item>...</style>
. Und dann rufe ich es mit einer Konstruktion auf :new Button(new ContextThemeWrapper(context, R.style.TabButton));
. Aber die Schaltfläche ignoriert einfach meine Einstellungen. Mache ich hier etwas falsch?parent="@android:style/Widget.Button"
parent
nicht geändert. Also habe ich einfach dieinflate
Lösung gemacht.new Button(new ContextThemeWrapper(context, R.style.TabButton), null, 0)
. Andernfalls wird der Standardschaltflächenstil angewendet, und dieser Stil überschreibt den Schaltflächenstil, den Sie über den ContextThemeWrapper in das Thema eingefügt haben.Sie können den Stil im Konstruktor festlegen (Stile können jedoch nicht dynamisch geändert / festgelegt werden).
View(Context, AttributeSet, int)
(Dasint
ist ein Attribut im aktuellen Thema, das einen Verweis auf einen Stil enthält.)Antwort von Romain Guy
Referenz
quelle
Der Parameter int
defStyleAttr
gibt den Stil nicht an. Aus der Android-Dokumentation:Um den Stil im View-Konstruktor einzurichten, haben wir zwei mögliche Lösungen:
Bei Verwendung von ContextThemeWrapper:
Mit Konstruktor mit vier Argumenten (verfügbar ab LOLLIPOP):
Schlüsselsache für beide Lösungen -
defStyleAttr
Parameter sollte 0 sein, um unseren Stil auf die Ansicht anzuwenden.quelle
Dynamisch wechselnde Stile werden (noch) nicht unterstützt. Sie müssen den Stil festlegen, bevor die Ansicht über XML erstellt wird.
quelle
Die akzeptierte Antwort war eine großartige Lösung für mich. Das einzige, was hinzugefügt werden muss, ist die
inflate()
Methode.In der akzeptierten Antwort
android:layout_*
werden nicht alle Parameter angewendet.Der Grund ist keine Möglichkeit, es anzupassen, Ursache
null
wurde als übergebenViewGroup parent
.Sie können es so verwenden:
View view = inflater.inflate(R.layout.view, parent, false);
und das
parent
ist dasViewGroup
, von wo aus du dich gerne einstellstandroid:layout_*
.In diesem Fall werden alle relativen Eigenschaften festgelegt.
Hoffe, es wird für jemanden nützlich sein.
quelle
Wenn Sie benutzerdefinierte Ansichten verwenden, die möglicherweise die Stilvererbung (oder ereignisstilfähige Attribute) verwenden, müssen Sie den zweiten Konstruktor ändern, um den Stil nicht zu verlieren. Dies funktionierte bei mir, ohne dass setTextAppearence () verwendet werden musste :
quelle
Ich bin auch auf das Problem gestoßen und habe den Weg gefunden, den Stil programmatisch festzulegen. Vielleicht braucht ihr es alle, also aktualisiere ich dort.
Der dritte Parameter des View-Konstruktors akzeptiert einen Typ von attr in Ihrem Design als folgenden Quellcode:
Sie müssen also eine Art von R.attr. ** anstelle von R.style. ** übergeben
In meinen Codes habe ich folgende Schritte ausgeführt:
Passen Sie zunächst ein benutzerdefiniertes attr an, das von Themen in attr.xml verwendet werden soll.
Zweitens geben Sie Ihren Stil in Ihrem verwendeten Thema in style.xml an.
Am Ende benutze es!
Die programmgesteuert erstellte Ansicht verwendet den angegebenen Stil in Ihrem Thema.
Sie können es versuchen und hoffen, dass es perfekt für Sie funktioniert.
quelle
Ich habe nur mit EditText getestet, aber Sie können die Methode verwenden
um einen in einer XML-Datei definierten Stil anzuwenden.
Da diese Methode zu View gehört, funktioniert sie meiner Meinung nach mit jedem UI-Element.
Grüße.
quelle
Wir können verwenden
TextViewCompact.setTextAppearance(textView, R.style.xyz)
.Android- Dokument als Referenz.
quelle