it-swarm.dev

Android appcompat-v7: 21.0.0 malzeme onay kutusunu değiştir

Projemi en yeni appcompat destek kütüphanesini kullanacak şekilde güncelledim, yeni sürüm malzeme tasarım onay kutularını ve radyo düğmelerini kullanıyor. Benim app karanlık temalı ve onay kutuları siyah görmek zor. Renklerini Uyumluluk Korumasına göre değiştirmeye çalışıyorum ama şu ana kadar hiçbir şey işe yaramıyor.

res/values ​​/ styles.xml

  <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">

    <!-- customize the color palette -->
    <item name="colorAccent">@color/silver</item>
  </style>

build.gradle:

    Android {
      compileSdkVersion 21
      buildToolsVersion '21.1.1'

      defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
      }
    }

.....
.....    

    compile 'com.Android.support:appcompat-v7:21.0.0'

AndroidManifest.xml:

  <application
      Android:name="ee.mtakso.App"
      Android:allowBackup="true"
      Android:icon="@drawable/ic_launcher"
      Android:label="@string/app_name"
      Android:theme="@style/AppBaseTheme">

Onay kutuları, editTexts, radyo düğmeleri vb. Siyah kalır.

Düzenle

Bunun fazla bir fark yaratıp yaratmadığını bilmiyorum, ancak kullandığım radyo düğmeleri ve onay kutuları aşağıdaki gibi bir CheckedTextView içindir:

Tekli (radyo düğmesi):Android:checkMark="?android:attr/listChoiceIndicatorSingle"

Çoklu (onay kutusu):Android:checkMark="?android:attr/listChoiceIndicatorMultiple"

Bunlar siyah renkli malzemeyi çizilebilir hale getirdiğinden, sorunun onlardan geldiğini sanmıyorum.

61

işaretlenmemiş CheckBox'lar ve RadioButtons ..__ ile benzer bir sorunum vardı: Çözümü buldum;

<item name="Android:textColorSecondary">@color/secondary_text</item>


DÜZENLE:

Uygulamanızın veya etkinliğinizin temasının L's AppCompat'tan (Dark/Light/Light.DarkActionBar) miras aldığını belirterek şunları yapabilirsiniz:

<style name="SampleTheme" parent="Theme.AppCompat">
    <item name="colorAccent">@color/green</item>
    <item name="Android:textColorSecondary">@color/red</item>
</style>

Ve bu sonuç:

enter image description here

Notice: Farklı bir etki elde ettiğinizde muhtemelen "wrong" temasını kullanırsınız - doğru ayarladığınızdan emin olun.

122
paulina_glab

Bunun AppCompat temasında bir hata olduğuna inanıyorum. Geçici çözümüm, xml düzen dosyasındaki her CheckBox öğesine iki satır kod ekleyerek.

Android:button="@drawable/abc_btn_check_material"
Android:buttonTint="@color/colorAccent"

Asla abc_ drawables referansını yönlendirmek istemezsiniz ama bu durumda başka bir çözüm bulamadım.

Bu, RadioButton widget'ı için de geçerlidir! Sadece kullanırsın. abc_btn_radio_material yerine abc_btn_check_material

35
Codeversed

Bunu en azından bir onay kutusunun sınırını değiştirmek için yaptım:

<style name="checkBoxComponent" parent="AppTheme">
    //Checked color
    <item name="colorAccent">@color/blueBackground</item> 
    //Checkbox border color
    <item name="Android:textColorSecondary">@color/grayBorder</item> 
</style>

Ve benim düzenimde

<Android.support.v7.widget.AppCompatCheckBox
                        Android:layout_width="wrap_content"
                        Android:layout_height="wrap_content"
                        Android:theme="@style/checkBoxComponent"
                        Android:text="Yay" />

Yine de onay kutusunun arka planını nasıl alacağınızı bulmaktan .. Umarım yardımcı olur.

16
Daniel S.

Ben de seninle aynı problemleri yaşadım .. __ Bir kez daha baktım AppCompat v21 - Lolipop Öncesi Cihazlar için Materyal Tasarımı!

Ve şunu da buldum "Tüm Faaliyetlerinizin v4 destek kütüphanesindeki FragmentActivity bölümünden uzayan ActionBarActivity öğesinden uzaması gerekir, böylece parçaları kullanmaya devam edebilirsiniz."

Bu yüzden aktivitemi ActionBarActivity olarak değiştirdim ve problemlerimi çözdü. Umarım senin de çözecektir.

14
Tezi

Bir çözüm aradım ve buldum. 

Aşama 1  
ActionBarActivity'yi Genişlet 

public static class MyActivity extends ActionBarActivity {
        //...
}

Adım 2  
Stil dosyanızda iki değer yazıyor

<style name="MyTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="colorAccent">#009688</item>
        <item name="Android:textColorSecondary">#757575</item>
</style>

colorAccent- işaretli renk 
Android: textColorSecondary- denetlenmeyen renk 

Aşama 3  
Temanızı AndroidManifest.xml dosyasında ayarlayın.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
          package="com.test.radiobutton"
          Android:versionCode="1"
          Android:versionName="1.0">
    <application Android:label="@string/app_name" Android:icon="@drawable/ic_launcher">

                    ....

        <activity Android:name=".activity.MyActivity "
                  Android:theme="@style/MyTheme"/>

                  .....

    </application>
</manifest>



SONU&CCEDIL;
Android 5
Android_5
Android 4.2.2
Android_4.2.2

8
nexus700120

1. styles.xml dosyanızda özel bir stil bildirin.

<style name="CustomStyledRadioButton" parent="Theme.AppCompat.Light">
    <item name="colorControlNormal">@color/red</item>
    <item name="colorControlActivated">@color/red_pressed</item>
</style>

2. Bu stili Android ile RadioButton'unuza uygulayın: tema niteliği.

  <RadioButton  Android:id="@+id/rb_option1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:checked="true"
    Android:gravity="left"
    Android:lineSpacingExtra="10dp"
    Android:padding="10dp"
    Android:text="Option1"
    Android:textColor="@color/black"
    Android:theme="@style/CustomStyledRadioButton"/>
7
Muhamed Riyas M

% 100 Çalışma

RadioButton'unuz için bir stil oluşturun ve aşağıdaki gibi colorAccent'i değiştirin:

<style name="RadioButtonTeal" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/md_teal_600</item>
</style>

Ardından bu stili AppCompatRadioButton'a ekleyin:

<Android.support.v7.widget.AppCompatRadioButton
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"
     Android:theme="@style/RadioButtonTeal" />
5

Renkleri belirtmek için geçersiz kıl:

kontrol edilen renk için:

<item name="Android:colorControlActivated">@color/your_color</item> 

denetlenmeyen renk için:

<item name="Android:colorControlNormal">@color/your_color</item>
4
YTerle

Uyumluluk kitaplığında hem onay kutularıyla hem de radyo düğmeleriyle birçok sorun yaşayacaksınız.

1) Herhangi bir Android 4.x cihazı için yalnızca siyah renkte gelirler. Android 5.x ve 2.x de okuyorlar (neden 2.x üzerinde çalıştığını sorma, ipucu yok).

2) Engelli bir durumları yok (tüm onay kutularınızın etkinleştirilip etkinleştirilmediği önemli değil, aksi takdirde çok kötü bir sürpriz için iyisiniz).

Varsayılan koyu tema arka planının gri değil, siyah olduğuna dikkat edin, bu nedenle varsayılanı tutarsanız "ok" olur.

Bunu çözmek için, tümü benim çekirdek projeme eklenmiş, ancak uyum projesinde değil (belirgin bakım amaçlı) aşağıdaki çekmecelerin beyaz ve devre dışı bir versiyonunu yarattım:

abc_btn_check_to_on_mtrl_000
abc_btn_check_to_on_mtrl_015
abc_btn_radio_to_on_mtrl_000
abc_btn_radio_to_on_mtrl_015

Ardından, tüm durumları yönetmek için bir çekmece yaratıldı (uyumlu orijinal durumu geçersiz kılmak için):

Örneğin, karanlık tema bunu kullanacaktır:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:state_checked="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" />
    <item Android:state_enabled="true" Android:state_checked="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_015" />
    <item Android:state_enabled="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_000" />
    <item Android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" />
</selector>

Işık teması bunu kullanacaktır (kullanıcı uygulamamdaki temayı değiştirebilir):

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:state_checked="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" />
    <item Android:state_enabled="true" Android:state_checked="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_light" />
    <item Android:state_enabled="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_light" />
    <item Android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" />
</selector>

O zaman tek yapmam gereken varsayılan uyumluluk temasını (her iki açık/koyu tema için hem etkinlik hem de diyalog) geçersiz kılmak, şunun gibi:

    <item name="Android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item>
    <item name="Android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>

Ve bu hafif temalar için:

    <item name="Android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material_light</item>
    <item name="Android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material_light</item>

Şimdi her Android sürümünde tamamen operasyonel onay kutuları ve radyolar var! IMO uyum kütüphanesi karanlık tema için hiç test edilmedi, sadece beyaz tema kullanıldı. Engelli devlet muhtemelen uyum kütüphanesinin geliştiricisi tarafından da kullanılmaz.

3
3c71

Sadece ActionBarActivity like 'u uzatın: 

Public class MainActivity extends ActionBarActivity {

//...

}
2
Leebeedev

Belirli bir onay kutusu arka plan rengini (uygulamanın tamamı değil) değiştirmek istiyorsanız, aşağıdaki numarayı deneyebilirsiniz:

Çekilebilir klasörde arka plan için custom_checkbox.xml dosyası oluşturun:

 <shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
     <stroke Android:width="14dp" Android:color="@Android:color/transparent"  />
     <solid Android:color="#ffffff" /> //the intended color of the background
     <corners Android:radius="2dp" />
 </shape> 

ve onay kutusunun arka planı olarak ayarlayın:

<CheckBox
    Android:id="@+id/rebate_tnc_checkbox"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="@drawable/custom_checkbox" />
1
Kharda

Android blog gönderisine göre ne için çalışmalısınız:

colorAccent : Birincil markalama rengine parlak tamamlayıcı. Varsayılan olarak, bu çerçeve denetimlerine uygulanan renktir (colorControlActivated aracılığıyla).

colorControlActivated : Çerçeve denetlemelerine, aktif (ör. kontrol edilmiş) durumlarında çerçeve denetimlerine uygulanan renk. 

Belki de problem @ style/Theme.AppCompat.Light olan temanızdan geliyor, sadece Theme.AppCompat ile deneyin: 

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <!-- customize the color palette -->
    <item name="colorAccent">@color/silver</item>
</style>
1
Gaëtan M.

uyarı iletişim kutusunun yapısına başka bir tema iletebilirsiniz 

<style name="RadioButton" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorControlNormal">@color/red</item>
    <item name="colorControlActivated">@color/green</item>
</style>

ve bu stili yapıcıda kullanma

new AlertDialog.Builder(getContext(), R.style.RadioButton);
1
SjoerdvGestel

AppTheme cihazınızın ebeveyni, @style/Theme.AppCompat.Light.

@style/Theme.AppCompat olarak değiştirin.

Şimdi kontrolleriniz karanlık bir arka plan üzerinde aydınlık olacak.

0
Mark Buikema

El ile ComboBox oluşturmaya çalışırsanız (yeni ComboBox () ...), ne ayarladığınız önemli değil, daima siyah olacaklar. Uyum kütüphanesinin bozulduğu açık, bunun için bir hata raporu hazırladım: https://code.google.com/p/Android/issues/detail?id=158020

0
Martin Vysny

Ben appcompat kitaplığı v21 kullanıyorum:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/custom_color</item>
        <item name="colorAccent">@color/custom_color</item>    
</style>

Yukarıdaki stil, onay kutumun malzeme tasarımıyla görünmesini sağlar (Android 5, 4.3, 4.1.1'de test edilmiştir) ancak Android 2.3.3'de eski onay kutusu stiliyle görünür.

0
Kinga l

Eklemek

<item name="Android:textColorSecondary">@color/secondary_text</item>

style.xml ve style.xml'de (v21)

0
touchchandra

bu sözdizimini, onay kutusu veya radyo düğmesi gibi bir widget'ı renklendir için ekle

0
Mayank Metha