บทความ Android วันนี้ ขอนำเสนอเรื่อง การทำ Drop-Down Menu ด้วยการใช้ Spinner หลักจากที่พบว่าหลายๆคนมีปัญหาเกี่ยวกับการใช้งาน Spinner กันพอสมควร มีบางคนสอบถามมาว่าสร้างยังไง วันนี้ก็จะมานำเสนอ วิธีทำและตัวอย่างประกอบครับ
ตัวอย่าง Spinner
Create Project
เริ่มต้นสร้างโปรเจ็คขึ้นมา
หากขึ้นข้อความแบบข้างล่างนี้ เนื่องจาก Android Studio เวอร์ชันล่าสุด เปลี่ยนไปใช้ Gradle Plugin เวอร์ชั่น 0.13 ซึ่งมัน required Gradle เวอร์ชัน 2.1 หากเครื่องเราไม่มี มันก็จะทำการเตือน กด OK เพื่ออัพเดท Gradle ครับ
สังเกตที่ไฟล์ build.gradle
ในส่วน Root Project ต้องเป็นดังนี้
build.gradle
อีกไฟล์นึงคือ gradle/gradle-wrapper.properties
ดูว่า เวอร์ชัน 2.1 ถูกต้องหรือไม่
หากมีปัญหา ในการสร้างโปรเจ็ค ก็ให้ใช้เวอร์ชันลอง Gradle Plugin และ Gradle ตามด้านบนเลยครับ
Spinner คืออะไร ?
Spinner เป็น View หรือ Widget ตัวหนึ่งของ Android ที่เอาไว้แสดงเมนูรายชื่อ แบบ Drop-Down
ขั้นตอนการสร้าง Spinner มีดังนี้
-
สร้าง Spinner ในไฟล์ xml และทำการเชื่อมกับส่วนของโค๊ด
-
กำหนดลิสต์ข้อมูลที่ต้องการขึ้นมา
-
สร้าง Adapter
โดยใช้ข้อมูลจากข้อ 2 และเลเอาท์ที่ต้องการ อย่างในตัวย่าง จะใช้ ArrayAdapter
และเลเอาท์ที่แสดง ก็เป็น default ของ android นั่นก็คือ android.R.layout.simple_dropdown_item_1line
-
setAdapter
ให้กับ Spinner จากข้อ 1 โดยใช้ Adapter จากข้อ 3
เริ่มต้นสร้าง Spinner
การสร้าง Spinner คล้ายๆกับการทำ ListView ซึ่งจำเป็นต้องมี ข้อมูล ตัวข้อมูลที่เราต้องการให้มาแสดงใน Spinner สามารถสร้างได้โดยการกำหนดเป็น Array ในโปรแกรม หรือว่ากำหนดเป็น string-array ในไฟล์ strings.xml
ก็ได้ อีกคลาสที่ใช้ในการทำ Spinner ก็คือตัว Adapter อาจจะเป็น ArrayAdapter
หรือว่าเป็น CursorAdapter
ที่ไว้สำหรับดึงข้อมูลมาจากฐานข้อมูล
เริ่มต้นเปิดไฟล์ activity_my.xml
ขึ้นมาครับ ทำการสร้าง Spinner ขึ้นมาสองตัว ดังนี้
ตัวอย่าง จะทำการสร้าง Spinner ขึ้นมาสองตัว ตัวแรก เป็นรายชื่อสโมสรฟุตบอลของไทย จะสร้างแบบ ArrayList ในโปรแกรม และตัวที่สอง เป็นรายชื่อสโมสรฟุตบอลของอังกฤษ จะสร้างด้วย string-array ในไฟล์ strings.xml
เปิดไฟล์ MyActivity.java
ขึ้นมา ทำการเชื่อม Spinner ในโค๊ดกับ Layout และกำหนด ArrayList ดังนี้
mThaiSpinner
: คือ Spinner ที่จะแสดงรายชื่อสโมสรไทย
mEnglishSpinner
: คือ Spinner ที่จะแสดงรายชื่อสโมสรอังกฤษ
mThaiClub
: คือ ArrayList ข้อมูลสโมสรไทย
สร้างข้อมูลด้วย string-array
ต่อมาทำการสร้างข้อมูลให้กับ Spinner ของสโมสรอังกฤษบ้าง โดยการเพิ่ม string-array ในไฟล์ res/values/strings.xml
ดังนี้
ขั้นตอนต่อไป สร้าง ArrayAdapter ขึ้นมาสองตัว ตัวแรก ใช้ข้อมูล mThaiClub
ตัวที่สอง ใช้ข้อมูลจาก strings.xml
ดังนี้
ตัว simple_dropdown_item_1line
เป็นเลเอาท์ default ของทาง Android นะครับ เมื่อทดสอบรันโปรแกรม จะได้หน้าตาดังนี้
ส่วน layout ของ Spinner เราก็สามารถเปลี่ยนได้นะ ลองใช้ simple_spinner_item
แทน จะได้ item list ที่ช่องไฟเล็กลง ดังนี้
สุดท้าย เมื่อได้ Spinner แล้ว ต่อไปก็ใส่ Listener ให้มัน ตัว Spinner จะใช้ setOnItemSelectedListener()
เพื่อส่ง Listener เมื่อเราทำการเลือกไอเท็มใน Spinner โดยตัว setOnItemSelectedListerner()
จะรับ interface AdapterView.OnItemSelectedListener()
ดังนี้
Custom Spinner with Custom Adapter
ตัวอย่างนี้จะทำการสร้าง Custom Spinner โดยใช้ Custom Adapter (คล้ายกับการทำ Custom ListView) เพื่อทำให้ Drop Down ของเรา โชว์รูปภาพ และข้อความด้วย
วิธีการก็คือ เริ่มต้นสร้าง Custom Adapter ขึ้นมาก่อน หากใครไม่รู้จัก Custom Adapter อ่านบทความนี้ประกอบครับ วิธีการทำ Custom ListView
สร้างไฟล์ list_item_adapter.xml
ดังนี้ ใน หนึ่งแถวมี ImageView และ TextView
สร้างไฟล์ CustomAdapter.java
ขึ้นมาดังนี้
โค๊ดด้านบน สร้าง CustomAdapter ขึ้นมา โดยที่ให้โหลดรูป จาก android.R.drawable
โดยการใช้ switch case เพื่อแสดงโลโก้ และแสดงชื่อเมนู จาก ArrayList<String>
กลับมาที่ไฟล์ activity_my.xml
ทำการเพิ่ม Spinner เข้ามาอีกตัว
คลาส MyActivity.java
ทำการสร้าง Spinner ขึ้นมา โดยใช้ CustomAdapter
ที่ได้สร้างไว้ พร้อมกับ ArrayList<String>
ดังนี้
ทดสอบรันโปรแกรม ผลลัพธ์เป็นดังนี้
สุดท้าย ก็ลองไปประยุกต์ใช้งานกันดูนะครับ มีพวกการโหลดข้อมูลมาใส่ Spinner โดยดึงข้อมูลมาจาก SQLite หรือว่าจะเป็นการรับข้อมูลมาจาก Web Service ต่างๆ เป็นต้น สำหรับบทความนี้ก็ยกตัวอย่างมาพอสมควรแล้ว ทีเหลือก็ขึ้นอยู่กับผู้อ่าน นำไปประยุกต์ใช้งานแล้วละครับ ขอให้โชคดี Happy Coding