SORU
23 EKİM 2014, PERŞEMBE


Malzeme Tasarımı ile Android Düğmeleri boyama ve AppCompat

AppCompat güncelleme bugün çıktı. önce düğmeleri eski sürümleri Android L ama rengini değiştirmek mümkün oldu. Yeni AppCompat güncelleme sonra buton kayboluyor deneyin yaptığımda her iki sürüm için rengini değiştirmek için kuramıyorum. Kimseye düğme rengini değiştirmek için nasıl biliyor mu?

Aşağıdaki resimleri elde etmek istiyorum gösterir

picture showing desired result

Beyaz düğme varsayılan, kırmızı olanı istiyorum.

Bu daha önce styles.xml: düğmeleri rengini değiştirmek için ne yaptığımı

<item name="android:colorButtonNormal">insert color here</item>

ve bunu yapmak için dinamik olarak:

button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);

Ayrıca Theme.AppCompat.Light.DarkActionBar @android:style/Theme.Material.Light.DarkActionBar tema üst değiştirdim

CEVAP
16 Aralık 2014, Salı


Bu AppCompat düğmesini henüz desteklemiyor beri arka plan olarak xml kullanabilirsiniz. Bunu yapmak için Android kaynak kodunu bir göz attım ve şekillendirme malzeme düğmeleri için ilgili dosyaları buldum.

1 - kaynaktan malzeme düğme orijinal uygulama Bak.

btn_default_material.xml on android source code bakabilirsiniz.

Projelerinize dosya drawable-v21 klasör kopyalayabilirsiniz. Ama renk güzel bir sorudur burada dokunma. Değiştirmek için gereken dosya ikinci dosya.

drawable-v21/custom_btn.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:drawable="@drawable/btn_default_mtrl_shape" />
</ripple>

2 - orijinal malzeme düğmesinin şeklini Almak

Farkında olarak bir şekil this file of the source code bulabileceğiniz bu drawable içinde kullanılır.

<inset xmlns:android="http://schemas.android.com/apk/res/android"
   android:insetLeft="@dimen/button_inset_horizontal_material"
   android:insetTop="@dimen/button_inset_vertical_material"
   android:insetRight="@dimen/button_inset_horizontal_material"
   android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
    <corners android:radius="@dimen/control_corner_material" />
    <solid android:color="?attr/colorButtonNormal" />
    <padding android:left="@dimen/button_padding_horizontal_material"
             android:top="@dimen/button_padding_vertical_material"
             android:right="@dimen/button_padding_horizontal_material"
             android:bottom="@dimen/button_padding_vertical_material" />
</shape>

3 - malzeme düğmesi Almak boyutları

Ve bu dosyada bazı boyutları dosyası that you can find here kullanılır. Tüm dosyayı kopyalayın ve içine koydeğerlerklasör. Bu tüm tuşlara aynı boyutta malzeme düğmeleri kullanılan () uygulamak için önemlidir

4 - başka bir drawable eski sürümleri için dosya Oluşturmak

Eski sürümleri için aynı ada sahip başka bir drawable olmalıdır. Öğeleri satır içi koymak yerine başvuru yapıyorum direk. Başvuru için onları isteyebilirsiniz. Fakat yine de, en önemli şey malzeme düğmesinin özgün boyutları vardır.

drawable/custom_btn.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- pressed state -->
    <item android:state_pressed="true">
        <inset xmlns:android="http://schemas.android.com/apk/res/android"
            android:insetLeft="@dimen/button_inset_horizontal_material"
            android:insetTop="@dimen/button_inset_vertical_material"
            android:insetRight="@dimen/button_inset_horizontal_material"
            android:insetBottom="@dimen/button_inset_vertical_material">
            <shape android:shape="rectangle">
                <corners android:radius="@dimen/control_corner_material" />
                <solid android:color="@color/PRESSED_STATE_COLOR" />
                <padding android:left="@dimen/button_padding_horizontal_material"
                    android:top="@dimen/button_padding_vertical_material"
                    android:right="@dimen/button_padding_horizontal_material"
                    android:bottom="@dimen/button_padding_vertical_material" />
            </shape>
        </inset>
    </item>

    <!-- focused state -->
    <item android:state_focused="true">
        <inset xmlns:android="http://schemas.android.com/apk/res/android"
            android:insetLeft="@dimen/button_inset_horizontal_material"
            android:insetTop="@dimen/button_inset_vertical_material"
            android:insetRight="@dimen/button_inset_horizontal_material"
            android:insetBottom="@dimen/button_inset_vertical_material">
            <shape android:shape="rectangle">
                <corners android:radius="@dimen/control_corner_material" />
                <solid android:color="@color/FOCUSED_STATE_COLOR" />
                <padding android:left="@dimen/button_padding_horizontal_material"
                    android:top="@dimen/button_padding_vertical_material"
                    android:right="@dimen/button_padding_horizontal_material"
                    android:bottom="@dimen/button_padding_vertical_material" />
            </shape>
        </inset>
    </item>

    <!-- normal state -->
    <item>
        <inset xmlns:android="http://schemas.android.com/apk/res/android"
            android:insetLeft="@dimen/button_inset_horizontal_material"
            android:insetTop="@dimen/button_inset_vertical_material"
            android:insetRight="@dimen/button_inset_horizontal_material"
            android:insetBottom="@dimen/button_inset_vertical_material">
            <shape android:shape="rectangle">
                <corners android:radius="@dimen/control_corner_material" />
                <solid android:color="@color/NORMAL_STATE_COLOR" />
                <padding android:left="@dimen/button_padding_horizontal_material"
                    android:top="@dimen/button_padding_vertical_material"
                    android:right="@dimen/button_padding_horizontal_material"
                    android:bottom="@dimen/button_padding_vertical_material" />
            </shape>
        </inset>
    </item>
</selector>

Sonuç

Düğmesi Lolipop cihazlar üzerinde dalgalanma etkisi olacaktır. Eski sürümleri dalgalanma etkisi hariç tam olarak aynı düğme var. Ama farklı durumlar için drawables verdiğiniz bu yana, aynı zamanda dokunma olayları (eski yol) karşılık verirler.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • ethr95awd

    ethr95awd

    8 Kasım 2006
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007