บทความ

กำลังแสดงโพสต์ที่มีป้ายกำกับ android studio

การอัพเดท App บน Google Play ด้วย Android Studio 3.5

รูปภาพ
หลังจากที่ส่งไฟล์ Application ขึ้นเผยแพร่บน Google Play แล้ว สิ่งที่จะเกิดขึ้นแน่นอน คือต้องมีการปรับปรุง เพิ่มเติม เพื่อให้สมบูรณ์อยู่ตลอดเวลา หรืออาจจะมีการเปลี่ยนแปลง เพิ่มขีดความสามารถต่าง ๆ ของโปรแกรม ให้มากขึ้น แก้ไข Bug หรือ ทำตามข้อเสนอของผู้ใช้ เป็นต้น การปรับปรุง มีขั้นตอนใหญ่ ๆ อยู่ 2 ขั้นตอน คือ จัดเตรียมโปรแกรม เพื่อนำขึ้น Google Play นำขึ้น Google Play โดยใช้ Google Play Console การจัดเตรียมโปรแกรม เพื่อนำขึ้น Google Play เป็นการปรับปรุงแก้ไขไฟล์ โดยใช้ Android Studio และจัดทำไฟล์ให้อยู่ในรูปแบบที่สามารถเผยแพร่ (release) ขี้นบน Google Play ซึ่งมีขั้นตอน ดังนี้ ทำความสะอาด เอาสิ่งรกรุงรังออก โดยใน Android Studio ไปที่เมนู Build > Clean Project แก้ไข Version Code ไม่ให้ซ้ำกับ Application ที่เคยส่งขึ้นไปแล้ว แก้ไขใน Gradle Scripts/bulld.gradle (Module:app) เพื่อกำหนด Version Code และ Version Name Version Code จำเป็นต้องเปลี่ยน แต่ Version Name หรือ ชื่อ ถ้าเปลี่ยนแปลงไม่มาก อาจจะใช้ชื่อเดิมได้ หรือ ไปที่ File > Project Structure...  สำหรับ And

การปรับเปลี่ยนลักษณะ Toast ของ Android Studio

รูปภาพ
Android Studio มี Toast ให้สำหรับแสดงข้อความง่าย ๆ เหมือนกับเป็น Message Box แต่ได้กำหนดตำแหน่งและรูปร่างเอาไว้ ไม่ค่อยน่าสนใจ เพราะ กำหนดให้อยู่ที่ตำแหน่งตรงกลาง ด้านล่าง และมีพื้นสีดี ตัวหนังสือสีขาว แต่เราสามารถทำให้น่าสนใจ โดยเปลี่ยนสีพื้น เปลี่ยนตำแหน่ง เปลี่ยนขนาด หรือ จะเปลี่ยนสีตัวหนังสือด้วย ก็ได้ ข้างล่างนี้เป็นตัวอย่าง Toast ที่ปรับใช้แล้ว การปรับเปลี่ยน Toast สามารถทำได้ โดยการสร้างไฟล์ Layout ที่เป็นไฟล์ xml แล้วปร้บเปลี่ยนตามต้องการ หรือ เรียกใช้ Default TextView ของ Toast มาปรับเปลี่ยน ก็ได้ ตัวอย่างข้างล่างนี้ เป็นการเรียกใช้ Default TextView มาปรับตามต้องการ วิธีการ สร้างข้อความใน Strings.xml โดยใช้ชื่อว่า loading และ กำหนดข้อความ "กรุณา รอสักครู่" </resources> <string name="loading">กรุณา รอสักครู่...</string> </resources> สร้างไฟล์ xml ผมใช้ชื่อว่า toast_green_bkg.xml เอาไว้ในห้อง drawable สำหรับเป็นสีพื้นหลัง และกำหนดให้มุมโค้งมนตามต้องการ <?xml version="1.0" encoding="utf-8&qu

การสร้าง Dialog Fragment แบบ Full Screen

รูปภาพ
ผมใช้ Dialog Fragment เพื่อแสดงข้อความ แต่มีปัญหาคือ Dialog ไม่เต็มหน้าจอ มีขอบว่าง เลยต้องหาทาง กำจัดขอบออก ให้แสดงเต็มจอ การสร้าง Dialog Fragment แบบ Full Screen 1. สร้าง Project ใหม่ และสร้าง MainActivity โดยมีปุ่ม 1 ปุ่ม เมื่อคลิกไป จะไปเปิด Dialog Fragment MainActivity.java import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.support.v4.app.FragmentTransaction; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void showDialog(View view){ String myTitle = "ตัวอย่าง Fullscreen Dialog"; String myMessage = "\r\n1. สวัสดีครับ " + "\r\n2. jadf djasf dsjfsd fjddfjkdsf " + "\r\n3. fkjd fdsklfj dfljfl ladks" + "\r\n4. jdfjds

การสร้างลิงค์ใน DialogFragment ของ Android 1.5

รูปภาพ
มีหลายครั้งที่เราต้องการสร้างลิงค์เชื่อมโยงไปยังเว็บต่าง ๆ ใน DialogFragment ของ Android ดังภาพ หลักการ โดยปกติเราจะไม่สามารถใช้ลิงค์ไปยังหน้าเว็บอื่น ๆ จาก DialogFragment ได้ ถ้าต้องการให้มี Link เราต้องจัดการข้อความที่จะให้แสดง โดยทำให้เป็น SpannableString เสียก่อน ใช้ Linkyfy สร้างลิงค์ นำไปไว้ใน TextView และเอา TextView ไปไว้ใน Dialog อีกที จึงจะได้ลิงค์ตามต้องการ วิธีการ สร้างไฟล์ใหม่ ตั้งชื่อว่า AlertDialogWithLink สร้าง Java Class ชื่อ MyDialogFragment.java สำหรับเป็น adapter สร้าง Dialog MyDialogFragment.java package com.thongjoon.alertdialogwithlink; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.os.Bundle; import android.text.SpannableString; import android.text.method.LinkMovementMethod; import android.text.util.Linkify; import android.widget.TextView; public class MyDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { //

การปรับแต่ง TabLayout ของ Android

รูปภาพ
TabLayout เป็นเหมือนกับแถบเมนูที่อยู่ด้านบนของหน้าจอ ต่อจาก toolbar ลงมา ดังภาพ เราสามารถจัดการปรับเปลี่ยน หรือตั้งค่าองค์ประกอบต่าง ๆ ได้ ดังนี้ การกำหนดขนาดตัวอักษรบน TabLayout ก่อนอื่นต้องกำหนด style ไว้ใน style.xml เช่น <style name="MyCustomTabText" parent="TextAppearance.Design.Tab"> <tem name="android:textSize">20sp</item> </style> จากนั้น ที่ไฟล์ xml layout ที่มี TabLayout กำหนดให้ใช้ Style กับตัวอักษร ดังนี้ <android.support.design.widget.TabLayout ... app:tabTextAppearance="@style/MyCustomTabText" ... /> การจัดให้ TabLayout อยู่กึ่งกลางหน้าจอ ที่ไฟล์ xml layout ที่มี TabLayout กำหนดให้ใช้ Style กับตัวอักษร ดังนี้ <android.support.design.widget.TabLayout ... android:layout_gravity="center" ... /> ในกรณีที่มีการกำหนดให้ TabLaout มี scrollable ได้ ต้องเอาออกด้วย เพราะจะขัดกัน มี 2 อย่างอยู่ด้วยกันไม่ได้ การกำหนดความหนา และสี ของ S

การตรวจสอบ หรือ Debug โปรแกรม ใน Android Studio

รูปภาพ
การ Debug โปรแกรม เป็นเรื่องสำคัญ เพราะทำให้เรารู้ว่ามีข้อผิดพลาด หรือ Error อะไรเกิดขึ้นอย่างไร และ ณ จุดนั้น ค่าต่าง ๆ ของตัวแปรเป็นอย่างไร เป็นไปตามที่ต้องการหรือไม่ เพื่อที่จะได้แก้ไขให้ตรงจุด ก่อนการแก้ไข ควรเปิด Simulator ให้เรียบร้อยเสียก่อน ผมชอบใช้ โทรศัพท์จริง เป็น Simulator เพราะเท่าที่สังเกตดูน่าจะเร็วกว่าการใช้ Simulator ใน PC การ Debug โปรแกรมใน Android Studio มีดังนี้ เปิดโปรแกรม ใน Android Studio และไปยังจุดที่ต้องการดูค่าต่าง ๆ  คลิกเพิ่มจุดหยุด หรือ Break point หน้าบรรทัดที่ต้องการดูค่าตัวแปร ในภาพ จะเห็นว่ามีการกำหนดจุดหยุด 2 จุดด้วยกัน คลิกปุ่ม Debug บนแถบเมนู Android Studio จะให้เลือก Simulator ถ้าเปิดไว้ก่อนก็จะมีมาแสดง ในตัวอย่างนี้ ผมใช้โทรศัพท์ จึงแสดงดังภาพ เมื่อกดปุ่ม OK โปรแกรม Android Studio จะทำงานในโหมด Debug โดยจะหยุดในตำแหน่งที่ระบุไว้ด้วยจุดสีแดง  จะเห็นมีหน้าจอ Debug เกิดขึ้น ถ้าไม่เห็น สามารถคลิกแถบ Debug ที่ด้านล่างได้ ในหน้าจอ Debug จะเห็นแถบควบคุมต่าง ๆ เช่น แถบตรวจดูค่าของตัวแปร หรือ Watches ถ้าไม่เห็นแถบดังกล่าว แสดงว่าแ

การสร้าง ViewPager สำหรับ Android 1.5

รูปภาพ
ViewPager ของ Android ทำให้สามารถสร้างหน้าจอข้อมูลบนโทรศัพท์ที่ใช้ OS ของ Android ได้สะดวกขึ้น เพราะมีการออกแบบไว้แล้วอย่างเรียบร้อย สามารถใช้นิ้วลาก/ปัด/swipe เพื่อเปลี่ยนหน้า จากอีกหน้าหนึ่ง ไปยังหน้าหนึ่งได้ ดังตัวอย่างข้างล่างนี้ ในตัวอย่างนี้ ใช้ Android Studio 1.5 เพื่อสร้าง ViewPager โดยใช้ Fragment เพียง Fragment เดียว และส่งข้อมูลมาแสดงจำนวนทั้งหมด 6 หน้าด้วยกัน การส่งข้อมูลไปยัง Fragment ใช้การส่งแบบ static โดยส่งเป็น String แล้วมาแยกเพื่อนำไปแสดงใน TextView จำนวน 2 ข้อความด้วยกัน นอกจากนี้ จะมีการกำหนดให้มีหัวของแต่ละรายการ โดยใช้ PageStrip เพื่อแสดงรายการ หลักการ สร้าง Fragment สำหรับแสดงข้อมูลแต่ละหน้า ในตัวอย่างนี้ จะแสดงเฉพาะ ชื่อ และจังหวัดเท่านั้น โดยจะใช้ Fragment นี้กับข้อมูลทั้งหมด ซึ่งมีด้วยกัน 6 รายการ (แสดงรายการละหน้า) ไฟล์ Java Class สำหรับ Fragment นี้ จะกำหนดให้มีตัวแปร เป็น Static เพื่อรับการส่งข้อมูลเข้ามาจากภายนอกด้วย จากนั้นจะสร้าง Adapter ซึ่งเป็นตัวกลางจัดการข้อมูลไปยัง Fragment และสุดท้าย ก็จะเป็นหน้าหลัก ซึ่งมี Fragment

การเปลี่ยนชื่อ Project และ Package ของ Android Studio 1.5

รูปภาพ
มีหลายครั้งที่เราต้องการ คัดลอก และ วาง Project ของ Android เพื่อปรับแก้ไข หรือ เพิ่มคุณลักษณะ แต่ยังคงรักษา Project เดิมเอาไว้ การเปลี่ยนชื่อ Project อย่างเดียวยังไม่พอ ต้องเปลี่ยนชื่อ Package ด้วย เพราะ Android ถือว่า ชื่อ Package จะต้องไม่ซ้ำกัน ถ้าเปลี่ยนชื่ออย่างเดียว เมื่อนำขึ้นเผยแพร่ จะทำให้เกิดปัญหาได้ วิธีการเปลี่ยนชื่อ Project และ Package ไปที่ห้อง Project ของ Android คัดลอก และวาง ห้อง Project ที่ต้องการคัดลอก  วาง และเปลี่ยนชื่อห้อง เช่น จากของเดิม engExamPrepPro4 เป็น engExamPrepPro5 เปิด Android Studio และเลือก Import Project เลือก Project ที่เปลี่ยนชื่อแล้ว ในตัวอย่างคือ engExamPrepPro5 รอสักครู่ Project ใหม่พร้อมชื่อใหม่จะเปิดขึ้น ที่ หน้าต่าง Explorer ของ Android Studio ให้เลือก Android ไปที่ห้อง Package ของ Project แล้วคลิกขวา  คลิกขวา เลือก Refactor > Rename จะเกิดหน้าจอโต้ตอบ ให้เลือก Rename Package จะเกิดหน้าจอโต้ตอบ ให้ระบุชื่อ Package พร้อมทั้งให้แก้ไขชื่อทั้งหมดใน Project แล้วกด Refactor รอสักครู่ เมื่อ Android ค้นหาข้อความ

การใช้ CheckBox ใน listView ด้วย CustomAdapter ของ Android

รูปภาพ
เมื่อคราวที่แล้ว พูดถึงเรื่องการสร้าง checkbox ใน listView ด้วย customAdapter ของ Android แต่ยังไม่ได้พูดถึงการใช้งาน checkbox ที่สร้างขึ้น Android สร้าง ListView เพื่อการประหยัดทรัพยากร โดยจะไม่ทำการแปลง xml ไฟล์ ให้เป็น java object ในทุกครั้งที่มีการ scroll หน้าจอของ listview โดยการใช้ inflater เพราะเป็นกระบวนการที่ต้องนำเอา view ที่มีทั้งหมดใน xml มาเปลี่ยนให้เป็น object เช่น ถ้า list มีทั้งหมด 30 รายการ แต่ละรายการประกอบด้วย textView imageView และ checkBox ก็ต้องทำการแปลงให้เป็น java object ทั้งหมด ซึ่งอาจจะไม่จำเป็น เพราะรายการที่อยู่นอกหน้าจออาจจะไม่ได้ถูกใช้งานก็ได้ วิธีการประหยัดของ android คือการนำเอา list item ที่ถูก scroll ออกไปนอกหน้าจอ กลับมาใช้ใหม่ ซึ่ง Android เรียกว่า เป็นการ Recycle โดยกระบวนการทั้งหมด จะถูกกระทำใน getView() วิธีการนี้ ทำให้เราต้องจัดการกับ checkbox ที่มีอยู่ใน listview เนื่องจากมีการนำกลับมาใช้ใหม่ ทำให้ตำแหน่งของ checkbox ที่ถูกเลือก เปลี่ยนตำแหน่งไปเป็นแบบสุ่ม เป็นผลให้ เมื่อคลิกที่ checkBox และทำการ scroll จะพบว่า มีการเลือก checkBox ตัวอื่น

การใช้ checkBox ใน listView ด้วย customAdapter

รูปภาพ
โดยปกติ ถ้าใช้ listView เราจะเรียกใช้ adapter ที่มากับ Android Studio คือ  android.R.layout. simple_list_item_1  แต่ Adapter ตัวนี้ ใช้ได้เฉพาะกับ ข้อมูลใน listView ที่เป็นตัวอักษร เท่านั้น ถ้าต้องการให้มีภาพ หรือ อย่างอื่น ๆ เช่น checkBox หรือ RadioBox หรือ จัดรูปแบบให้หลากหลาย ก็ไม่สามารถทำได้ เราจึงต้องสร้างรูปแบบเอง และสร้าง Adapter ขึ้นเอง ซึ่งเรียกว่าเป็น customAdapter ในตัวอย่างต่อไปนี้ จะเป็นการสร้าง listView ที่ประกอบด้วย checkBox และข้อความ ดังภาพ มีขั้นตอนหลัก ๆ ดังนี้ สร้าง Project ใหม่ สร้าง Activity แรก และสร้าง Activity สำหรับหน้าเมนูหลักเพื่อเรียกใช้งาน listBox สร้าง layout ที่จะใช้เป็นรูปแบบของ listView ในแต่ละรายการ หรือ item ที่ประกอบด้วย checkBox และ textBox หรือกล่องข้อความ ที่จะปรากฏใตแต่ละรายการ สร้างไฟล์ java หรือ Class ใหม่ เพื่อให้เป็น customAdapter เพื่อ แปลง หรือปรับข้อมูลที่มีทั้ง checkBox และ  textBox พร้อมทั้งเรียกใช้งานใน Activity ที่ต้องการใช้ listView วิธีการ การสร้าง Project ใหม่ สร้าง Project ใหม่ ในตัวอย่างนี้ใช้ Android Studio

onSaveInstanceState()

รูปภาพ
การพัฒนา Application สำหรับ Android phone มีประเด็นที่จะต้องจัดการด้วยตัวเองอย่างหนึ่งคือ เวลาผู้ใช้งานเปลียนมือถือ จากแนวตั้งเป็นแนวนอน โปรแกรมจะปรับสภาพไปสู่สภาพเดิม เหมือนเมื่อเริ่มต้นเข้ามาที่หน้าจอใหม่ ๆ ที่เป็นเช่นนี้ เพราะ Android Studio ต้องการปรับสภาพให้เข้ากับสภาวะใหม่ ดังนั้น เราจึงต้องจัดการ บันทึกสภาพปัจจุบันของหน้าจอเอาไว้ และเมื่อมีการปรับเปลี่ยนสภาพใหม่ ก็ให้ตรวจสอบข้อมูลเดิมพร้อมทั้งบันทึกเอาไว้ และนำกลับมาใช้ให้เหมือนเดิม มิฉะนั้นผู้ใช้อาจจะงงว่า ทำไมข้อมูลหน้าจอจึงเปลี่ยนไป ยกตัวอย่างเช่น ผู้ใช้กำลังทำข้อสอบถึงข้อที่ 5 บังเอิญว่า อยากจะอ่านข้อความตามแนวนอน จึงหมุนหน้าจอ จากแนวตั้งมาดูตามแนวนอน แต่ผลปรากฏว่า ข้อสอบจากข้อที่ 5 กลับมาเป็นข้อ 1 ที่เป็นเช่นนี้เพราะ เมื่อมีการเปลี่ยนแนว หรือ Orientation ของมือถือ วงจรชีวิตของหน้าจอนั้น ๆ จะยุติลง และเริ่มต้นใหม่ โดยใช้ค่าเริ่มต้นที่มีอยู่ ดังนั้นจึงกลับไปสู่สภาพเดิม การจัดเก็บสภาพของหน้าจอ ด้วย onSaveInstanceState() ในกรณีตัวอย่างข้อสอบข้างต้น มีการกำหนดตัวแปรคือ thisQuestionNum เพื่อเก็บหมายเลขข้อของข้อสอบ เ