android düğme seçici


115

Bu, normal olduğunda kırmızı, basıldığında gri görünecek şekilde bir düğme seçicidir.

Kodun, BASILDIĞINDA metin boyutu ve rengi de değişebilecek şekilde doğrudan nasıl değiştirilebileceğini sormak istiyorum. Çok teşekkürler!

<item android:state_pressed="true" >         
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="@color/grey"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>    
</item>

<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="#FF6699"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>
</item>

Yanıtlar:


217

Sadece sete ihtiyaç selectorait buttondüzeninizin dosyasında.

<Button
     android:id="@+id/button1"
     android:background="@drawable/selector_xml_name"
     android:layout_width="200dp"
     android:layout_height="126dp"
     android:text="Hello" />

ve bitti.

Düzenle

Aşağıdaki olduğu button_effect.xmldosya drawabledizinine

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

    <item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>

Bunda 3 tane çekilebildiğini görüyorsunuz , yukarıda yazdığım gibi bu button_effectstili kendinize buttonyerleştirmeniz yeterli. Sadece değiştirmeniz gerekiyor selector_xml_nameile button_effect.


Basılmış ve basılmamış durumu nasıl ayarlayacağınız konusunda biraz daha detay verebilir misiniz? (yuvarlak renk, kontur, vb. gibi yukarıdaki tüm bileşenlerle). Çok teşekkürler!
pearmak

Seçici uygulamak için en iyi yolu xml Bu bakınız kullanmaktır blazin.in/2016/03/how-to-use-selectors-for-botton.html bu başına ve çalışma olarak uygulanan i
Bhushan Shirsath

Merhaba, bu yazıyı bir süredir yazmışsın biliyorum ama belki neyi kaçırdığımı anlayacaksın. Kodunuzu kullandım ve düğmem her zaman yeşil, sonra basıldı = doğru ve seçildi = doğru çekilebilir griye dönüşüyor ancak diğer etkinlik açılmadan önceki ikinci kod düğmesi varsayılan android stiline sahip. Kaçırdığım durum hakkında bir fikrin var mı?
volfk

27

Çekilebilir bir durum listesi ile metin boyutu değişikliği elde edemezsiniz . Metin rengini ve metin boyutunu değiştirmek için şunu yapın:

Metin rengi

Metin rengini değiştirmek için renk durumu listesi kaynağı oluşturabilirsiniz . Dizinde bulunan ayrı bir kaynak olacaktır res/color/. Düzen xml'de, android:textColoröznitelik değeri olarak ayarlamanız gerekir . Renk seçici daha sonra şuna benzer bir şey içerecektir:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/text_pressed" />
    <item android:color="@color/text_normal" />
</selector>

Yazı Boyutu

Metnin boyutunu yalnızca kaynaklarla değiştiremezsiniz. "Dimen seçici" yok. Bunu kodla yapmalısın. Ve basit bir çözüm yok.

Muhtemelen en kolay çözüm View.onTouchListener(), yukarı ve aşağı olayları buna göre kullanmak ve ele almak olabilir . Bunun gibi bir şey kullanın:

view.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // change text size to the "pressed value"
                return true;
            case MotionEvent.ACTION_UP:
                // change text size to the "normal value"
                return true;
            default:
                return false;
            }
        }
});

Görünümü genişletmek ve setPressed(Boolean)yöntemi geçersiz kılmak farklı bir çözüm olabilir . Yöntem, basılı durum değişikliği gerçekleştiğinde dahili olarak çağrılır. Ardından yöntem çağrısında metnin boyutunu buna göre değiştirin (süper çağırmayı unutmayın).


14

Çekilebilir klasörde custom_selector.xml oluşturun

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/unselected" android:state_pressed="true" />
   <item android:drawable="@drawable/selected" />
</selector>

Çekilebilir klasörde selected.xml şekli oluştur

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/selected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>

Çekilebilir klasörde seçilmemiş.xml şekli oluşturun

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/unselected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>

Color.xml of values ​​klasöründe seçilen / seçilmemiş durum için aşağıdaki renkleri ekleyin

<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>

Eğer komple bir çözüm kontrol edebilirsiniz burada


2

Seçiciyi uygulamanın en iyi yolu, programatik yol kullanmak yerine xml kullanmaktır, çünkü xml ile uygulanması daha kolaydır.

    <?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/button_bg_selected" android:state_selected="true"></item>
        <item android:drawable="@drawable/button_bg_pressed" android:state_pressed="true"></item>
        <item android:drawable="@drawable/button_bg_normal"></item>

    </selector>

Daha fazla bilgi için bu bağlantıyı kullanarak uyguladım http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html


2

Düzen .xml dosyasında

<Button
 android:id="@+id/button1"
 android:background="@drawable/btn_selector"
 android:layout_width="100dp"
 android:layout_height="50dp"
 android:text="press" />

btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>

 <item android:drawable="@drawable/btn_bg_selected" android:state_selected="true"></item>
<item android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/btn_bg_normal"></item>


1

Bu kodu kullanabilirsiniz:

<Button
android:id="@+id/img_sublist_carat"
android:layout_width="70dp"
android:layout_height="68dp"
android:layout_centerVertical="true"
android:layout_marginLeft="625dp"
android:contentDescription=""
android:background="@drawable/img_sublist_carat_selector"
android:visibility="visible" />

(Seçici Dosya) img_sublist_carat_selector.xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_focused="true" 
       android:state_pressed="true"        
       android:drawable="@drawable/img_sublist_carat_highlight" />
 <item android:state_pressed="true" 
       android:drawable="@drawable/img_sublist_carat_highlight" />
 <item android:drawable="@drawable/img_sublist_carat_normal" />
</selector>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.