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>

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 .


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


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


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


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>


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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.