ปุ่มประกอบด้วยข้อความหรือไอคอน หรือทั้งสองอย่างเพื่อสื่อสารสิ่งที่จะเกิดขึ้นเมื่อผู้ใช้แตะปุ่มดังกล่าว
คุณสามารถสร้างปุ่มในเลย์เอาต์ได้ 3 วิธี โดยขึ้นอยู่กับว่าคุณต้องการปุ่มที่มีข้อความ ไอคอน หรือทั้ง 2 อย่าง ดังนี้
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingRight="16dp" android:orientation="vertical" > <Button android:id="@+id/supabutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="I'm a button" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="A tiny Android icon" android:src="@drawable/baseline_android_24" app:tint="#ff0000" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableStart="@drawable/baseline_android_24" android:drawablePadding="4dp" android:drawableTint="#ff0000" android:text="I'm a button with an icon" /> </LinearLayout>
โค้ดก่อนหน้านี้จะสร้างในลักษณะนี้
ตอบสนองต่อกิจกรรมการคลิก
เมื่อผู้ใช้แตะปุ่ม ออบเจ็กต์Button
จะได้รับการเรียกเหตุการณ์เมื่อคลิก
หากต้องการประกาศเครื่องจัดการเหตุการณ์แบบเป็นโปรแกรม ให้สร้างออบเจ็กต์ View.OnClickListener
แล้วกำหนดให้กับปุ่มโดยเรียกใช้ setOnClickListener(View.OnClickListener)
ดังตัวอย่างต่อไปนี้
Kotlin
findViewById<Button>(R.id.supabutton) .setOnClickListener { Log.d("BUTTONS", "User tapped the Supabutton") }
Java
Button button = (Button) findViewById(R.id.supabutton); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.d("BUTTONS", "User tapped the Supabutton"); } });
จัดรูปแบบปุ่ม
ลักษณะของปุ่ม เช่น รูปภาพพื้นหลังและแบบอักษร จะแตกต่างกันไปตามอุปกรณ์ เนื่องจากอุปกรณ์จากผู้ผลิตรายต่างๆ มักจะมีสไตล์เริ่มต้นของการควบคุมอินพุตที่แตกต่างกัน
หากต้องการปรับแต่งปุ่มแต่ละปุ่มให้มีพื้นหลังแตกต่างกัน ให้ระบุแอตทริบิวต์ android:background
ด้วยทรัพยากรที่วาดได้หรือสี หรือจะใช้สไตล์สำหรับปุ่มก็ได้ ซึ่งจะทำงานคล้ายกับสไตล์ HTML เพื่อกำหนดคุณสมบัติสไตล์หลายรายการ เช่น พื้นหลัง แบบอักษร และขนาด ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้สไตล์ได้ที่สไตล์และธีม
ปุ่มไม่มีขอบ
การออกแบบที่มีประโยชน์อย่างหนึ่งคือปุ่ม "ไม่มีขอบ" ปุ่มไม่มีขอบมีลักษณะคล้ายกับปุ่มพื้นฐาน ยกเว้นที่ไม่มีขอบหรือพื้นหลัง แต่ยังคงเปลี่ยนลักษณะที่ปรากฏในสถานะต่างๆ เช่น เมื่อมีการแตะ
หากต้องการสร้างปุ่มที่ไม่มีเส้นขอบ ให้ใช้รูปแบบ
borderlessButtonStyle
กับปุ่ม ดังตัวอย่างต่อไปนี้
<Button android:id="@+id/supabutton" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="I'm a button" />
พื้นหลังที่กำหนดเอง
หากต้องการกำหนดรูปลักษณ์ของปุ่มใหม่อย่างแท้จริง คุณสามารถระบุพื้นหลังที่กำหนดเองได้ แต่พื้นหลังต้องเป็นทรัพยากรรายการสถานะที่เปลี่ยนลักษณะที่ปรากฏตามสถานะปัจจุบันของปุ่มแทนการส่งบิตแมปหรือสีธรรมดา
คุณสามารถกำหนดรายการสถานะในไฟล์ XML ซึ่งกำหนดรูปภาพหรือสี 3 รายการที่จะใช้สำหรับสถานะปุ่มต่างๆ
หากต้องการสร้าง drawable รายการสถานะสำหรับพื้นหลังของปุ่ม ให้ทำดังนี้
- สร้างบิตแมป 3 รายการสำหรับพื้นหลังของปุ่ม ซึ่งแสดงสถานะปุ่มเริ่มต้น ปุ่มที่แตะ และปุ่มที่มีโฟกัส สร้างบิตแมปเป็นบิตแมป9 ส่วนเพื่อให้รูปภาพพอดีกับปุ่มขนาดต่างๆ
- วางบิตแมปในไดเรกทอรี
res/drawable/
ของโปรเจ็กต์ ตั้งชื่อบิตแมปแต่ละรายการให้สอดคล้องกับสถานะของปุ่มที่แสดง เช่นbutton_default.9.png
,button_pressed.9.png
และbutton_focused.9.png
- สร้างไฟล์ XML ใหม่ในไดเรกทอรี
res/drawable/
ตั้งชื่อประมาณว่าbutton_custom.xml
แทรก XML ดังนี้<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/button_pressed" android:state_pressed="true" /> <item android:drawable="@drawable/button_focused" android:state_focused="true" /> <item android:drawable="@drawable/button_default" /> </selector>
คำสั่งนี้กำหนดทรัพยากรแบบวาดได้รายการเดียวที่จะเปลี่ยนรูปภาพตามสถานะปัจจุบันของปุ่ม
<item>
แรกจะกำหนดบิตแมปที่จะใช้เมื่อมีการแตะปุ่ม (เปิดใช้งาน)<item>
ตัวที่ 2 จะกำหนดบิตแมปที่จะใช้เมื่อปุ่มได้รับโฟกัส เช่น เมื่อไฮไลต์ปุ่มโดยใช้แทร็กบอลหรือปุ่มบังคับทิศทาง<item>
ลำดับที่ 3 จะกำหนดบิตแมปที่จะใช้เมื่อปุ่มอยู่ในสถานะเริ่มต้น ไม่มีการแตะหรือโฟกัส
ไฟล์ XML นี้แสดงทรัพยากรที่ถอนออกได้รายการเดียว เมื่อมีการอ้างอิงโดย
Button
สำหรับพื้นหลัง รูปภาพที่แสดงจะเปลี่ยนไปตามสถานะของปุ่ม - ใช้ไฟล์ XML ที่วาดได้เป็นพื้นหลังของปุ่ม ดังนี้
<Button android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" android:background="@drawable/button_custom" />
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไวยากรณ์ XML นี้ รวมถึงวิธีการกำหนดปุ่มที่ถูกปิดใช้ ถูกวางเมาส์ หรืออยู่ในสถานะอื่น โปรดอ่านเกี่ยวกับ StateListDrawable