2010-07-30 15 views
15

Pracuję teraz nad aplikacją, która używa podklasy ImageView, aby wyświetlić obraz z ramką ograniczającą nad jej częścią.Programowo uzyskaj kolory motywu

Teraz pudełko jest rysowane na żółto, bez względu na wszystko, ale myślę, że wyglądałoby znacznie lepiej, gdyby kolor pasował do przycisku wciśniętego przycisku systemu, na przykład pomarańczowy dla Droida, zielony dla Evo lub niebieski dla Galaxy S.

Rozejrzałem się trochę po API, ale nie mogłem znaleźć sposobu, aby programowo zdobyć ten kolor. Jakieś pomysły?

+0

to jest dobre pytanie i jestem Obawiam się, że nie ma rozwiązania ... naprawdę smutne – mad

+0

Minęło 5 lat, odkąd zadano to pytanie ... obecna odpowiedź znajduje się teraz tutaj: http://stackoverflow.com/questions/12375766/how-to-get-background- color-from-current-theme-programowo (ta pierwsza odpowiedź na pewno działa ...) – pbarranis

Odpowiedz

7

Można spojrzeć na źródła z Androidem themes.xml, styles.xml i colors.xml. Jedną rzeczą, którą zauważysz w pliku colors.xml, jest to, że nie zdefiniowano zbyt wielu kolorów. Wynika to z faktu, że większość widżetów jest tworzona za pomocą plików z 9 łatami.

Przycisk styl:

223  <style name="Widget.Button"> 
224   <item name="android:background">@android:drawable/btn_default</item> 
225   <item name="android:focusable">true</item> 
226   <item name="android:clickable">true</item> 
227   <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item> 
228   <item name="android:textColor">@android:color/primary_text_light</item> 
229   <item name="android:gravity">center_vertical|center_horizontal</item> 
230  </style> 

Wszystkie wykonanej pracy, aby zmienić kolory tła odbywa się w btn_defaultDrawable.

Źródło btn_default.xml:

17 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    18  <item android:state_window_focused="false" android:state_enabled="true" 
    19   android:drawable="@drawable/btn_default_normal" /> 
    20  <item android:state_window_focused="false" android:state_enabled="false" 
    21   android:drawable="@drawable/btn_default_normal_disable" /> 
    22  <item android:state_pressed="true" 
    23   android:drawable="@drawable/btn_default_pressed" /> 
    24  <item android:state_focused="true" android:state_enabled="true" 
    25   android:drawable="@drawable/btn_default_selected" /> 
    26  <item android:state_enabled="true" 
    27   android:drawable="@drawable/btn_default_normal" /> 
    28  <item android:state_focused="true" 
    29   android:drawable="@drawable/btn_default_normal_disable_focused" /> 
    30  <item 
    31   android:drawable="@drawable/btn_default_normal_disable" /> 
    32 </selector> 

Każdy z tych plików jest 9-łata. Problem polega na tym, że są to pngs. Kolory są wbudowane w pliki obrazów i nie są nigdzie zdefiniowane. Jak zauważyłeś, te obrazy można zastąpić, a wygląd zmienia się.

Niestety, to, czego chcesz, nie jest możliwe. Będziesz musiał wybrać jeden kolor, z którym chcesz przejść. Ten kolor prawdopodobnie powinien być wybrany tak, aby pasował do reszty aplikacji. Niestety :(

+0

Cóż, to przygnębiające. W każdym razie dzięki. – infinitypanda

1

Sprawdź ten link: Using Platform Styles and Themes

ja nie wiem, czy podklasy jest najlepszą rzeczą do zrobienia w tej sprawie. chciałbym spróbować:

  • Zastosowanie ImageButton zamiast podklasy.
  • Dodaj styl platformy do przycisku.
+2

Przeczytałem o tym, ale nie było to pomocne, ponieważ mówi mi, jak ustawić motywy, ale chcę uzyskać motywy. A ImageButton nie jest tym, czego szukam, przepraszam. Obrazek nie musi być klikalny, po prostu chcę użyć tego samego koloru co przycisk. – infinitypanda

7

z Android ICE_CREAM_SANDWICH (API 14), masz kolory tematem android.R.color *

Na przykład;.

myTextView.setTextColor(getResources().getColor(android.R.color.holo_red_light)); 
+1

W moim ograniczonym rozumieniu, coś dostępnego z android.R.color jest statycznym kolorem, a nie zmiennym kolorem z motywu aplikacji (zmienne w czasie wykonywania). Odpowiedź na to: http://stackoverflow.com/questions/12375766/how-to-get-background-color-from-current-theme-programmatically – pbarranis

Powiązane problemy