ตัวเลือกปุ่ม android


115

นี่คือตัวเลือกปุ่มที่ปกติจะปรากฏเป็นสีแดงเมื่อกดปุ่มจะปรากฏเป็นสีเทา

ฉันอยากจะถามว่าโค้ดสามารถแก้ไขเพิ่มเติมโดยตรงได้อย่างไรเมื่อ PRESSED ขนาดและสีของข้อความก็สามารถเปลี่ยนแปลงได้เช่นกัน ขอบคุณมาก!

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

คำตอบ:


217

คุณเพียงแค่ต้องชุดselectorของbuttonในไฟล์รูปแบบของคุณ

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

และเสร็จสิ้น

แก้ไข

ต่อไปนี้เป็นbutton_effect.xmlไฟล์ในdrawableไดเร็กทอรี

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

ในนี้คุณจะเห็นว่ามี 3 drawables คุณเพียงแค่ต้องวางbutton_effectสไตล์นี้ให้กับคุณbuttonตามที่ฉันเขียนไว้ข้างต้น คุณเพียงแค่ต้องเปลี่ยนด้วยselector_xml_namebutton_effect


คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับวิธีตั้งค่าสถานะกดและไม่กดได้ไหม (มีส่วนประกอบทั้งหมดข้างต้นเช่นสีกลมเส้นโครงร่าง ฯลฯ ) ขอบคุณมาก!
pearmak

วิธีที่ดีที่สุดในการใช้งานตัวเลือกคือการใช้ xml อ้างถึงblazin.in/2016/03/how-to-use-selectors-for-botton.html ฉันดำเนินการตามนี้และใช้งานได้
Bhushan Shirsath

สวัสดีฉันรู้ว่าคุณเขียนโพสต์นี้มานานแล้ว แต่บางทีคุณอาจจะรู้ว่าฉันขาดอะไรไป ฉันใช้รหัสของคุณและปุ่มของฉันเป็นสีเขียวทั้งหมดจากนั้นสำหรับการกด = true และ selected = true มันเปลี่ยนเป็นสีเทาได้ แต่ปุ่ม secod ก่อนที่จะเปิดกิจกรรมอื่น ๆ มีรูปแบบ Android เริ่มต้น มีความคิดอย่างไรที่ฉันขาดหายไป?
volfk

27

คุณไม่สามารถเปลี่ยนขนาดตัวอักษรด้วยรายการสถานะที่วาดได้ ในการเปลี่ยนสีข้อความและขนาดตัวอักษรให้ทำดังนี้:

สีข้อความ

ในการเปลี่ยนสีของตัวอักษรที่คุณสามารถสร้างทรัพยากรรายการรัฐสี จะเป็นทรัพยากรแยกต่างหากที่อยู่ในres/color/ไดเรกทอรี ในรูปแบบ xml คุณต้องตั้งเป็นค่าสำหรับandroid:textColorแอตทริบิวต์ จากนั้นตัวเลือกสีจะมีสิ่งนี้:

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

ขนาดข้อความ

คุณไม่สามารถเปลี่ยนขนาดของข้อความได้ง่ายๆด้วยทรัพยากร ไม่มี "ตัวเลือกการหรี่แสง" คุณต้องทำในรหัส และไม่มีทางแก้ไขอย่างตรงไปตรงมา

อาจเป็นวิธีแก้ปัญหาที่ง่ายที่สุดอาจใช้View.onTouchListener()และจัดการกับเหตุการณ์ขึ้นลงตามลำดับ ใช้สิ่งนี้:

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

วิธีแก้ปัญหาอื่นอาจเป็นการขยายมุมมองและแทนที่setPressed(Boolean)เมธอด เมธอดนี้เรียกภายในเมื่อการเปลี่ยนแปลงของสถานะกดเกิดขึ้น จากนั้นเปลี่ยนขนาดของข้อความตามวิธีการเรียกใช้ (อย่าลืมเรียกซุปเปอร์)


14

สร้าง custom_selector.xml ในโฟลเดอร์ที่วาดได้

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

สร้างรูปร่าง selected.xml ในโฟลเดอร์ที่วาดได้

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

สร้างรูปร่าง unselected.xml ในโฟลเดอร์ที่วาดได้

<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

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

คุณสามารถตรวจสอบโซลูชันทั้งหมดได้จากที่นี่


2

วิธีที่ดีที่สุดในการใช้งานตัวเลือกคือการใช้ xml แทนการใช้วิธีทางโปรแกรมเนื่องจากการใช้งาน 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>

สำหรับข้อมูลเพิ่มเติมฉันใช้ลิงก์นี้ http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html


2

ในไฟล์ 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

คุณสามารถใช้รหัสนี้:

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

(ไฟล์ตัวเลือก) 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.