2014-11-03 17 views
5

Korzystanie v21 AppCompat możemy ustawić niestandardowe motywy kolorów jak następuje:tworzone dynamicznie przycisk radiowy lub CheckBox nie wykorzystuje jeden kolor

<style name="Theme.MyTheme" parent="Theme.AppCompat"> 
    <!-- customize the color palette --> 
    <item name="colorPrimary">@color/primary</item> 
    <item name="colorPrimaryDark">@color/primary_dark</item> 
    <item name="colorAccent">@color/accent</item> 
</style> 

Ale mam sporo dynamicznie tworzonych wyboru i przycisków radiowych które nie są zawyżone z xml. Te dynamicznie tworzone obiekty nie dziedziczą akcentu kolorystycznego, który określiłem. Co mogę zrobić, aby właściwie ustawić te akcenty kolorystyczne?

+0

Neoh pan ostatecznie rozwiązać swój problem? –

+0

Nie, muszę użyć xml do nadmuchania ich widoków, nawet jeśli są one dynamicznie tworzone, jak sugerowali. – Neoh

+0

Nawet z nowymi widżetami AppCompat? Zobacz moją odpowiedź. –

Odpowiedz

11

Nie można nic z tym zrobić, oprócz tworzenia pliku układu z jednym elementem CheckBox i nadmuchiwaniem go.

Witryna programistów: Projekt motywu materiałowego można zastosować tylko podczas ładowania widoków za pomocą nadmuchiwanego arkusza.

Dzieje się tak dlatego, że nowy materiałowy podkład w projektowaniu jest dołączany do procesu napełniania układu.

Źródło: http://android-developers.blogspot.nl/2014/10/appcompat-v21-material-design-for-pre.html

Edit:
W nowszych wersjach 22.1+ widgetów AppCompat v7 jak CheckBox i RadioButton mogą być tworzone dynamicznie (nie ukryte/API wewnętrzna).

Obecnie wspierane są te widżety:

  • AppCompatAutoCompleteTextView
  • AppCompatButton
  • AppCompatCheckBox
  • AppCompatCheckedTextView
  • AppCompatEditText
  • AppCompatMultiAutoCompleteTextView
  • AppCom patRadioButton
  • AppCompatRatingBar
  • AppCompatSpinner
  • AppCompatTextView
  • AppCompatSeekBar (od 23.1)
  • AppCompatImageButton (od 23.1)
  • AppCompatImageView (od 23.1)
5

uruchomiony w tym samym problem i teraz mam plik material_factory_ * xml dla każdego z dynamicznie tworzonych widoków. Jego nieco irytujące, ale to działa:

// checkbox = new CeckBox(context); 
checkbox = (CheckBox) View.inflate(context, R.layout.material_factory_checkbox, null); 

a plik material_factory_checkbox.xml:

<?xml version="1.0" encoding="utf-8"?> 
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
0

Was ma ten sam problem. Musisz ustawić motyw przycisku radiowego, a nie styl.

android:theme="@style/RadioButtonStyle" 

Przykład

<RadioButton 
android:theme="@style/RadioButtonStyle" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_marginBottom="10dp" /> 

Ps ten działa na dynamicznie tworzonych Radio przycisków

-1

Spróbuj użyć AppCompatCheckBox z biblioteki wsparcia:

import android.support.v7.widget.AppCompatCheckBox; 

AppCompatCheckBox cb = new AppCompatCheckBox(context); 
1

rzeczywiście można coś zrobić, zastosować styl na widoku pompowania, jak:

<CheckBox 
     android:id="@+id/check_text" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/save_password_label" 
     android:theme="@style/CheckBoxStyle" 
     /> 

ze stylem:

<style name="CheckBoxStyle" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorAccent">@color/colorPrimary</item> 
</style> 
Powiązane problemy