bộ chọn nút android


115

Đây là một bộ chọn nút sao cho khi bình thường nó có màu đỏ, khi nhấn nó sẽ có màu xám.

Tôi muốn hỏi làm thế nào mã có thể được sửa đổi trực tiếp hơn nữa để khi NHẤN, kích thước văn bản và màu sắc cũng có thể thay đổi? Cảm ơn nhiều!

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

Câu trả lời:


217

Bạn chỉ cần thiết lập selectorcủa buttontrong file layout của bạn.

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

và thực hiện.

Biên tập

Sau đây là button_effect.xmltệp trong drawablethư mục

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

Trong này, bạn có thể thấy rằng có 3 ngăn kéo, bạn chỉ cần đặt button_effectphong cách này cho của bạn button, như tôi đã viết ở trên. Bạn chỉ cần thay thế selector_xml_namebằng button_effect.


bạn có thể vui lòng giải thích thêm về cách đặt trạng thái ép và không ép không? (với tất cả các thành phần ở trên như màu tròn, nét vẽ, v.v.). Cảm ơn nhiều!
pearmak

Cách tốt nhất để thực hiện bộ chọn là sử dụng xml tham khảo này blazin.in/2016/03/how-to-use-selectors-for-botton.html tôi thực hiện theo này và làm việc của nó
Bhushan Shirsath

Xin chào, tôi biết bạn đã viết bài này một thời gian nhưng có lẽ bạn sẽ biết tôi đang thiếu gì. Tôi đã sử dụng mã của bạn và nút của tôi luôn có màu xanh lục, sau đó khi nhấn = true và đã chọn = true, nó chuyển có thể vẽ thành màu xám nhưng nút secod trước khi hoạt động khác được mở có kiểu android mặc định. Bất kỳ ý tưởng nào về trạng thái tôi đang thiếu?
volfk

27

Bạn không thể thay đổi kích thước văn bản với danh sách trạng thái có thể vẽ được . Để thay đổi màu văn bản và kích thước văn bản, hãy làm như sau:

Văn bản màu

Để thay đổi màu văn bản, bạn có thể tạo tài nguyên danh sách trạng thái màu . Nó sẽ là một tài nguyên riêng biệt nằm trong res/color/thư mục. Trong layout xml, bạn phải đặt nó làm giá trị cho android:textColorthuộc tính. Bộ chọn màu sau đó sẽ chứa một cái gì đó như sau:

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

Cỡ chữ

Bạn không thể thay đổi kích thước của văn bản chỉ bằng các tài nguyên. Không có "bộ chọn dimen". Bạn phải làm điều đó trong mã. Và không có giải pháp đơn giản.

Có lẽ giải pháp dễ dàng nhất có thể là sử dụng View.onTouchListener()và xử lý các sự kiện lên xuống cho phù hợp. Sử dụng một cái gì đó như thế này:

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

Một giải pháp khác có thể là mở rộng chế độ xem và ghi đè setPressed(Boolean)phương thức. Phương thức được gọi nội bộ khi xảy ra sự thay đổi trạng thái ép. Sau đó, thay đổi kích thước của văn bản cho phù hợp trong lệnh gọi phương thức (đừng quên gọi siêu).


14

Tạo custom_selector.xml trong thư mục có thể vẽ

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

Tạo hình dạng select.xml trong thư mục có thể vẽ

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

Tạo hình dạng unselected.xml trong thư mục có thể vẽ

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

Thêm các màu sau cho trạng thái đã chọn / không được chọn trong thư mục color.xml of giá trị

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

bạn có thể kiểm tra giải pháp hoàn chỉnh từ đây


2

Cách tốt nhất để triển khai bộ chọn là sử dụng xml thay vì sử dụng theo cách lập trình vì nó dễ áp ​​dụng hơn với 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>

Để biết thêm thông tin, tôi đã triển khai bằng liên kết này http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html


2

Trong tệp .xml bố cục

<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

Bạn có thể sử dụng mã này:

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

(Tệp bộ chọn) 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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.