Oto 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>
Jak ustawić style
atrybut programowo?
Odpowiedzi:
Technicznie możesz zastosować style programowo, z niestandardowymi widokami i tak:
Konstruktor jednego argumentu jest używany podczas programowego tworzenia widoków.
Połącz więc ten konstruktor z super, który pobiera parametr stylu.
Lub, jak zauważył po prostu @Dori:
źródło
http://developer.android.com/reference/android/widget/LinearLayout.html#LinearLayout(android.content.Context, android.util.AttributeSet, int)
. W przypadku LinearLayout wymagany jest poziom 11+.AttributeSet
?Button
. Podejście @Benjamin Piette działa dobrze.Co dla mnie zadziałało:
I
źródło
Aktualizacja : w momencie udzielenia odpowiedzi na to pytanie (połowa 2012 r., Poziom interfejsu API 14-15) programowe ustawienie widoku nie było opcją (nawet jeśli były pewne niebanalne obejścia), podczas gdy stało się to możliwe po nowszym interfejsie API wydania. Szczegóły znajdują się w odpowiedzi @ Blundell.
Stara odpowiedź:
Nie możesz jeszcze ustawić stylu widoku programowo, ale ten wątek może ci się przydać.
źródło
textView.setTextAppearance(context, R.style.mystyle);
. Zgodnie z dokumentem „Ustawia kolor tekstu, rozmiar, styl, kolor podpowiedzi i kolor podświetlenia z określonego zasobu TextAppearance”. developer.android.com/reference/android/widget/… , int)W przypadku nowego Button / TextView:
W przypadku istniejącej instancji:
W przypadku obrazu lub układów:
źródło
Jeśli chcesz nadal używać XML (na co nie pozwala zaakceptowana odpowiedź) i ustawić styl po utworzeniu widoku, możesz użyć biblioteki Paris, która obsługuje podzbiór wszystkich dostępnych atrybutów.
Ponieważ nadmuchujesz swój widok z XML, musisz określić identyfikator w układzie:
Następnie, gdy trzeba programowo zmienić styl, po napompowaniu układu:
Więcej informacji: lista obsługiwanych typów widoków i atrybutów (w tym tło, wypełnienie, margines itp., Które można łatwo rozszerzyć) oraz instrukcje instalacji z dodatkową dokumentacją .
Oświadczenie: Jestem oryginalnym autorem wspomnianej biblioteki.
źródło
Możesz zastosować styl do swojej działalności, wykonując:
lub domyślny system Android:
w twojej działalności wcześniej
setContentView()
.źródło
Brak podanych odpowiedzi jest poprawny.
Możesz ustawić styl programowo.
Krótka odpowiedź znajduje się na stronie http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/content/Context.java#435
Długa odpowiedź. Oto mój fragment, aby programowo ustawić niestandardowy styl zdefiniowany w widoku:
1) Utwórz styl w pliku styles.xml
Nie zapomnij zdefiniować niestandardowych atrybutów w pliku attrs.xml
Mój plik attrsl.xml:
Zauważ, że możesz używać dowolnej nazwy dla swojego stylowego (mój CustomWidget)
Teraz ustawmy styl widgetu Programowo Oto mój prosty widget:
układ:
I wreszcie implementacja klasy StyleLoader
Możesz znaleźć w pełni działający przykład na https://github.com/Defuera/SetStylableProgramatically
źródło
apply
metodzie, która nie robi nic interesującego. Prawdziwe znaczenie stylu polega na tym, że automatycznie nakłada pewien styl wizualny na wszystkie dynamicznie dodawane widoki w przyszłości. Ten kod tutaj oczywiście nie może tego zrobić i nie ma tu nic dynamicznego, musimy wiedzieć, jakie Widoki i jakie właściwości / pola ustawić.To dość stare pytanie, ale rozwiązaniem, które teraz działało, jest użycie czwartego parametru konstruktora
defStyleRes
- jeśli jest dostępny ... w widoku ... aby ustawić stylNastępujące prace do moich celów (kotlin):
źródło
To jest mój prosty przykład, kluczem jest
ContextThemeWrapper
opakowanie, bez niego mój styl nie działa i przy użyciu konstruktora trzech parametrów widoku.źródło
najprostszym sposobem jest przejście przez konstruktor
źródło
Nie proponuję używać ContextThemeWrapper, ponieważ:
Co może powodować niepożądane wyniki w Twojej aplikacji. Zamiast tego proponuję nową bibliotekę „Paris” dla inżynierów z Airbnb:
https://github.com/airbnb/paris
Ale po pewnym czasie korzystania z niego odkryłem, że jest naprawdę dość ograniczony i przestałem go używać, ponieważ nie obsługuje on wielu właściwości, których potrzebuję po wyjęciu z pudełka, więc trzeba to sprawdzić i jak zawsze zdecydować.
źródło
Użyłem widoków zdefiniowanych w XML w mojej złożonej grupie ViewGroup, zawyżając je dodając do grupy Viewgroup. W ten sposób nie mogę dynamicznie zmieniać stylu, ale mogę dokonać pewnych dostosowań stylu. Mój kompozyt:
}
i mój widok w xml, w którym mogę przypisywać style:
źródło
Możesz utworzyć plik XML zawierający układ z pożądanym stylem, a następnie zmienić zasób tła swojego widoku, w ten sposób .
źródło