selektor przycisku android

115

Jest to selektor przycisków taki, że normalnie ma kolor czerwony, a po naciśnięciu szary.

Chciałbym zapytać, jak można dalej bezpośrednio modyfikować kod, tak aby po NACIŚNIĘCIU rozmiar i kolor tekstu również się zmienił? Wielkie dzięki!

<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>

gruszka
źródło

Odpowiedzi:

217

Trzeba tylko zestaw selectorz buttonw pliku układu.

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

i zrobione.

Edytować

Poniżej znajduje się button_effect.xmlplik w drawablekatalogu

<?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>

Na tym widać, że są 3 rysunki, wystarczy umieścić ten button_effectstyl w swoim button, jak napisałem powyżej. Wystarczy wymienić selector_xml_namezbutton_effect .

Chintan Rathod
źródło
czy mógłbyś szerzej wyjaśnić, jak ustawić stan wciśnięty i nie wciśnięty? (ze wszystkimi powyższymi komponentami, takimi jak okrągły kolor, obrys itp.). Wielkie dzięki!
pearmak
Najlepszym sposobem realizacji selektor jest za pomocą XML przekazać ten blazin.in/2016/03/how-to-use-selectors-for-botton.html I wdrożone jak za to i jego pracy
Bhushan Shirsath
Cześć, wiem, że już dawno napisałeś ten post, ale może wiesz, czego mi brakuje. Użyłem twojego kodu, a mój przycisk jest zawsze zielony, a następnie dla press = true i selected = true zmienia się rysowanie na szary, ale drugi przycisk przed otwarciem innej czynności ma domyślny styl Androida. Masz pojęcie, jakiego stanu brakuje?
volfk
27

Nie można zmienić rozmiaru tekstu za pomocą listy stanów, którą można narysować . Aby zmienić kolor i rozmiar tekstu, wykonaj następujące czynności:

Kolor tekstu

Aby zmienić kolor tekstu, możesz utworzyć zasób listy stanów kolorów . Będzie to osobny zasób znajdujący się w res/color/katalogu. W układzie XML musisz ustawić go jako wartość android:textColoratrybutu. Selektor koloru będzie wtedy zawierał coś takiego:

<?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>

Rozmiar czcionki

Nie możesz zmienić rozmiaru tekstu po prostu za pomocą zasobów. Nie ma „selektora wymiarów”. Musisz to zrobić w kodzie. I nie ma prostego rozwiązania.

Prawdopodobnie najłatwiejszym rozwiązaniem może być odpowiednie wykorzystanie View.onTouchListener()i obsługa zdarzeń w górę iw dół. Użyj czegoś takiego:

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;
            }
        }
});

Innym rozwiązaniem może być rozszerzenie widoku i zastąpienie setPressed(Boolean)metody. Metoda jest wywoływana wewnętrznie, gdy następuje zmiana stanu wciśnięcia. Następnie odpowiednio zmień rozmiar tekstu w wywołaniu metody (nie zapomnij wywołać super).

Tomik
źródło
14

Utwórz plik custom_selector.xml w folderze do rysowania

<?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>

Utwórz kształt selected.xml w folderze do rysowania

<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>

Utwórz kształt unselected.xml w folderze do rysowania

<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>

Dodaj następujące kolory dla wybranego / niezaznaczonego stanu w folderze color.xml wartości

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

można sprawdzić kompletne rozwiązanie z tutaj

nirav kalola
źródło
2

Najlepszym sposobem na zaimplementowanie selektora jest użycie XML, a nie programowy sposób, ponieważ jest to łatwiejsze do zaimplementowania z XML.

    <?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>

Aby uzyskać więcej informacji, zaimplementowałem za pomocą tego linku http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html

Bhushan Shirsath
źródło
2

W pliku Layout .xml

<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>

Vishal G. Gohel
źródło
1

Możesz użyć tego kodu:

<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" />

(Plik selektora) 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>
Bhaskar Kumar Singh
źródło