Próbuję użyć TextView
konstruktora w stylu takim jak ten:
TextView myText = new TextView(MyActivity.this, null, R.style.my_style);
Jednak gdy to robię, widok tekstu nie wydaje się przyjmować stylu (zweryfikowałem styl, ustawiając go na obiekcie statycznym).
Próbowałem też używać, myText.setTextAppearance(MyActivity.this, R.style.my_style)
ale to też nie działa.
Możesz stworzyć ogólny styl i ponownie użyć go w wielu widokach tekstu, takich jak ten poniżej:
Edit: to odnosi się do kontekstu
źródło
TextViewCompat.setTextAppearance
Możesz przekazać ContextThemeWrapper do konstruktora w następujący sposób:
źródło
<style name="TabButton"><item name="android:background">@drawable/tabbar_button_bkgnd</item>...</style>
. I wtedy powołać go z budowy:new Button(new ContextThemeWrapper(context, R.style.TabButton));
. Ale przycisk po prostu ignoruje moje ustawienia. Czy robię tu coś złego?parent="@android:style/Widget.Button"
parent
się nie zmieniło. Właśnie dlatego wybrałeminflate
rozwiązanie.new Button(new ContextThemeWrapper(context, R.style.TabButton), null, 0)
. W przeciwnym razie zostanie zastosowany domyślny styl przycisku, który zastąpi styl przycisku scalony z motywem za pomocą ContextThemeWrapper.Możesz ustawić styl w konstruktorze (ale stylów nie można dynamicznie zmieniać / ustawiać).
View(Context, AttributeSet, int)
(int
jest atrybutem w bieżącym motywie, który zawiera odniesienie do stylu)Odpowiedź Romaina Guy'a
odniesienie
źródło
Parametr int
defStyleAttr
nie określa stylu. Z dokumentacji Androida:Aby skonfigurować styl w Konstruktorze widoków, mamy 2 możliwe rozwiązania:
Za pomocą ContextThemeWrapper:
Z czterargumentowym konstruktorem (dostępny od LOLLIPOP):
Kluczowa rzecz dla obu rozwiązań -
defStyleAttr
parametr powinien wynosić 0, aby zastosować nasz styl do widoku.źródło
Dynamicznie zmieniające się style nie są jeszcze obsługiwane. Musisz ustawić styl przed utworzeniem widoku za pomocą XML.
źródło
Przyjęta odpowiedź była dla mnie świetnym rozwiązaniem. Jedyną rzeczą do dodania jest
inflate()
metoda.W zaakceptowanej odpowiedzi wszystkie
android:layout_*
parametry nie zostaną zastosowane.Powodem nie ma sposobu, aby to skorygować, ponieważ przyczyna
null
została uznana zaViewGroup parent
.Możesz użyć tego w następujący sposób:
View view = inflater.inflate(R.layout.view, parent, false);
i
parent
jest toViewGroup
, z którego chcesz się dostosowaćandroid:layout_*
.W takim przypadku zostaną ustawione wszystkie właściwości względne.
Mam nadzieję, że przyda się komuś.
źródło
Podczas korzystania z widoków niestandardowych, które mogą wykorzystywać dziedziczenie stylu (lub atrybuty stylowalne dla zdarzenia), musisz zmodyfikować drugi konstruktor, aby nie stracić stylu. To działało dla mnie, bez potrzeby używania setTextAppearence () :
źródło
Spotkałem ten problem i znalazłem sposób na programowe ustawienie stylu. Może wszyscy tego potrzebujesz, więc aktualizuję.
Trzeci parametr konstruktora View akceptuje typ atrybutu w twoim motywie jako kod źródłowy poniżej:
Musisz więc przekazać rodzaj R.attr. ** zamiast R. style. **
W moich kodach wykonałem następujące kroki:
Najpierw dostosuj niestandardowy plik attr do użycia przez kompozycje w pliku attr.xml.
Po drugie, określ swój styl w używanym motywie w style.xml.
Na koniec użyj go!
widok utworzony programowo użyje określonego stylu w twoim motywie.
Możesz spróbować i mam nadzieję, że będzie on dla Ciebie idealny.
źródło
Testowałem tylko z EditText, ale możesz użyć tej metody
zastosować styl zdefiniowany w pliku XML.
Ponieważ ta metoda należy do widoku, uważam, że będzie działać z dowolnym elementem interfejsu użytkownika.
pozdrowienia.
źródło
Możemy użyć
TextViewCompact.setTextAppearance(textView, R.style.xyz)
.Dokumentacja systemu Android w celach informacyjnych.
źródło