/ / Android - użyj atrybutów, aby dostosować niestandardowe style - android, atrybuty, style, motywy

Android - użyj atrybutów, aby dostosować style niestandardowe - android, atrybuty, style, motywy

Oto mój problem. Zdefiniowałem niestandardowe motywy i style, aby dostosować różne Widoki w odpowiednich plikach .xml.

themes.xml:

...
<style name="Legacy" parent="android:Theme.NoTitleBar">
<item name="android:buttonStyle">@style/Legacy.Button</item>
...
</style>

styles.xml:

...
<style name="Legacy.Button" parent="@android:style/Widget.Button">
<item name="android:textColor">#ffffff</item>
<item name="android:background">@drawable/button_selector_blue</item>
<item name="android:textSize">15dp</item>
</style>

Powiedzmy, że ustawiłem motyw mojej aplikacji na Legacy. Jeśli użyję przycisku w układzie, otrzymam moje niestandardowe parametry domyślne (biały tekst, tło to @ drawable / button_selector_blue, itp.).

Powiedzmy, że chcę zachować te parametry dla rozmiaru tekstu: chciałbym mieć kilka przycisków o większym rozmiarze tekstu, które byłyby zdefiniowane w atrybucie titleSize w attrs.xml:

...
<attr name="titleSize" format="reference|dimension" />

i która wartość jest ustawiona dla każdego motywu w moim pliku themes.xml.

Więc mój układ zawierałby coś takiego:

<Button
android:id="@+idmyButtonId"
android:drawableRight="@drawable/aDrawable"
android:text="@string/someText"
android:textSize="?titleSize"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</Button>

Podczas uruchamiania mojej aplikacji pojawia się następujący błąd: java.lang.UnsupportedOperationException: Czy można „przekonwertować na wymiar: type = 0x2

Wygląda więc na to, że nie mogę dostosować niestandardowych stylów za pomocą atrybutów - przynajmniej nie w ten sposób. Czy to możliwe? Jeśli nie, co byś użył, aby osiągnąć taki wynik?

Chciałbym dać użytkownikowi możliwość wyboru spośród różnych motywów, więc nie mogę po prostu zdefiniować dodatkowego stylu ButtonWithLargeText i bezpośrednio go używać w moim układzie.

Dzięki za pomoc !

Odpowiedzi:

0 dla odpowiedzi № 1

W końcu udało mi się to uruchomić. Zamiast definiować rozmiar moich tytułów w attrs.xml, użyłem dimens.xml. Teraz działają następujące elementy:

<Button
android:id="@+idmyButtonId"
android:drawableRight="@drawable/aDrawable"
android:text="@string/someText"
android:textSize="@dimen/titleSize"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</Button>

Podczas gdy dostaję mój zwykły rozmiar tekstu (który zdefiniowałem w moim style.xml) na przycisku, używając tego:

<Button
android:id="@+id/idRegularButton"
android:text="@string/regularSizeText"
android:layout_width="wrap_content" android:layout_height="wrap_content">
</Button>