บทความ

การเปลี่ยนชื่อ 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 ค้น...

ตัวหนังสืออ่านไม่ออก เป็นเครื่องหมายคำถาม

รูปภาพ
การเปลี่ยนการเข้ารหัส หรือ Collation ฐานข้อมูลบน Server มักจะสร้างปัญหาเกี่ยวกับตัวอักษร ทำให้อ่านไม่ออก กลายเป็นเครื่องหมายคำถาม หรือ ตัวอักษรต่างดาวก็มี ดังตัวอย่างข้างล่างนี้ สาเหตุเกิดจากการไม่เข้ากันของการกำหนดชุดอักษร บนฐานข้อมูล MySql ใน Server และการใช้ encoding ของไฟล์ ตลอดจนการกำหนดชุดตัวอักษร หรือ charset บนหน้าเว็บ ทำให้มีปัญหาไม่ลงตัว Browser จึงแสดงออกมาเป็นเครื่องหมายคำถาม หรือ ข้อความต่างดาว อ่านไม่ออก เมื่อสังเกตจากตัวอย่าง จะเห็นว่า บางตัวก็เป็นตัวหนังสือธรรมดา แต่บางตัวก็เป็นตัวอ่านไม่ออก ที่เป็นเช่นนี้เพราะ ตัวที่อ่านไม่ออก เป็นข้อมูลที่ดึงออกมาจากฐานข้อมูลบน Server ส่วนตัวที่อ่านออก เป็นส่วนที่เขียนโค้ดในหน้าเว็บ ในตัวอย่างนี้ หน้าเว็บกำหนด charset เป็น tis-620 วิธีการแก้ไข หลังจากที่ติดต่อกับฐานข้อมูลแล้ว ให้ใช้คำสั่ง mysql_set_charset() เพื่อเปลี่ยนให้เป็น charset ที่ใช้ในหน้าเว็บ เช่น                                 $cid = mysql_connect($host,$usr,$pwd); mysql_set_ch...

การใช้ 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 ใหม่ ในตัวอย...

การส่งออกบางส่วนของภาพ ใน illustrator cs6

รูปภาพ
สมมุติว่า เราทำ Logo หลายชิ้น ใน Adobe Illustrator CS6 และต้องการบันทึกออกเป็นไฟล์ PDF หรือไฟล์นามสกุลอื่น หรือ ต้องการส่งออกไปยังโปรแกรม Photoshop แต่ต้องการส่งออกเฉพาะบาง Logo เท่านั้น จะทำอย่างไร ในภาพ ต้องการส่งออก หรือบันทึกเป็นไฟล์เฉพาะโลโก้ด้านซ้ายมือ ที่มีกรอบเป็นสีเหลือบเท่านั้น จะทำอย่างไรดี มีวิธีหลายวิธี แต่วิธีที่ง่ายที่สุดคือการจัด Artboard ให้คลุมเฉพาะโลโก้ที่ต้องการ แล้วจึงส่งออก หรือบันทึกเป็นไฟล์อื่น ๆ ตามต้องการ วิธีการ คลิกเลือกเฉพาะโลโก้ที่ต้องการส่งออก โดยใช้ Selection Tool ลากให้คลุม Artwork ที่ต้องการ จะได้ดังภาพ ไปที่ Object > Artboards > Fit to Selected Art Artboard จะย่อขนาดลงเท่ากับโลโก้ที่เลือกเอาไว้แล้ว ไปที่เมนู File > Save As... หรือ File > Export... Save As เพื่อบันทึกเป็นไฟล์ของ illustrator หรือ PDF หรือ อื่น ๆ  Export เพื่อส่งไปยัง Photoshop หรือ Flash หรือส่งออกเป็นภาพ BMP, JPG, WMF สำหรับ Windows Media หรือ เป็นไฟล์นามสกุลอื่น ๆ ภาพต้วอย่างส่งออกเป็น PDF ส่วนวิธีอื่น ๆ เช่น เลือก Artwork ทั้งหมด แล้...

การบันทึกอีแมล์ Gmail เป็นไฟล์ PDF

รูปภาพ
มีบางโอกาสที่เราจำเป็นต้องส่งไฟล์อีเมล เป็นไฟล์แนบกับจดหมายอีเมล ทำให้เราจำเป็นต้องบันทึกจดหมายอีเมลเป็นไฟล์ PDF เพื่อแนบจดหมายอีเมลอีกทีหนึ่ง ในที่นี้ จะใช้กับ Gmail เท่านั้น ส่วน อีเมลอื่น ๆ มีวิธีการที่แตกต่างกันไป วิธีการ เข้าไปที่กล่องจดหมาย และเปิดจดหมายที่ต้องการบันทึกเป็นไฟล์ PDF คลิกปุ่ม เพิ่มเติม ซึ่งเป็นปุ่มสามเหลี่ยมชี้ลง ข้าง ๆ ลูกศรตอบกลับ เลือก พิมพ์ จะเกิดหน้าจอให้ตั้งค่า พร้อมทั้งนำจดหมายอีเมลที่จะบันทึกเป็นไฟล์ PDF มาแสดงให้ดูด้วย  เสร็จแล้วกดปุ่ม บันทึก ระบุที่เก็บไฟล์ เพื่อจะได้นำไปเป็นไฟล์แนบ ต่อไป

onSaveInstanceState()

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

การสร้าง DialogFragment ใน Android Studio

รูปภาพ
การสร้าง Dialog เพื่อแสดงข้อความแจ้งเตือน หรือให้ข่าวสารแก่ผู้ใช้งานมือถือ Android โดยใช้  Android Studio ทำได้หลายอย่าง แต่วันนี้ จะพูดถึงการใช้ Fragment สำหรับสร้าง Dialog ซึ่งมีข้อดี คือ สามารถจัดการรูปแบบได้เองสะดวกดี เพราะใช้ Layout ที่สร้างเอง จึงนำเอาภาพ ข้อความมาจัดเรียงได้ ในตัวอย่างนี้ จะสร้าง DialogFragment โดยให้คลิกจากเมนูใน OverFlow Menu แล้วมาที่ Dialog ที่สร้างขึ้น โดยใช้ Android Studio 1.5.1 ภาพหน้าจอ DialogFragment ที่จะสร้าง ในครั้งนี้ ขั้นตอนการสร้าง สร้าง Project ใหม่ สร้าง Layout ที่ต้องการให้แสดงเป็น Dialog สร้าง Java Class สำหรับ DialogFragment เรียกใช้งาน ที่ OverFlow menu สร้าง Project ใหม่ สร้าง Project ใหม่ ตั้งชื่อตามต้องการ กำหนด API 11 และ Blank Activity สร้าง Layout สำหรับให้แสดงเป็น Dialog นำภาพไปใส่ไว้ในห้อง Drawable โดยใช้วิธี Copy แล้ว Paste ใน Android Studio สร้าง Layout โดยคลิกขวาที่ layout เลือก New > Layout Resource File ตั้งชื่อว่า df_demo   นำ ImageView  TextView และปุ่ม พร้อมทั้งนำภาพและข้อความ...

การสร้างปุ่มแชร์ บนมือถือ Android ด้วย ShareActionProvider

รูปภาพ
ShareActionProvider extends มาจาก Action Provider Class ซึ่งเริ่มจาก Android 4.0 (API 11) ซึ่งเป็นตัวจัดการเรียกแอป social media เพื่อแชร์ข้อมูลไปยังเพื่อน ๆ หรือ กลุ่มเพื่อน โดยเรียกใช้ โซเชียลแอปที่มีในมือถือนั้น ๆ เช่น Line Facebook Email Messenger เป็นต้น แล้วแต่ว่า ในมือถือนั้น ๆ จะติดตั้งแอป อะไรไว้บ้าง ShareActionProvider ก็จะนำมาให้เลือก และจัดการให้ทั้งหมด ดังภาพ ( ภาพที่ 1 แสดงไอคอนแชร์ ภาพที่ 2 เมื่อกดปุ่มแชร์ และภาพที่ 3 เมื่อกดปุ่มอีเมล) ปัญหาคือ แล้วจะเรียกใช้อย่างไร ปัญหามักจะอยู่ที่การเชื่อมโยงระหว่าง ShareActionProvider กับ menu itemในไฟล์ menu.xml เช่น บอกให้ไปใช้ MenuItemCompat หรือ มีปัญหาการ cast บอกว่า ไม่สามารถ cast จาก ActionProvider ไปยัง ShareActionProvider เป็นต้น  ในตัวอย่างนี้ ใช้ Android Studio 1.5 และใช้ App Bar ไม่ใช้ Action Bar  หลักการในการเรียกใช้งาน ShareActionProvider กำหนด Style ให้ไม่ใช้ Action Bar และเรียกใช้ใน theme ให้สอดคล้องกัน สร้าง menu item ใน menu.xml โดยไม่ต้องระบุไอคอน เพราะ ShareActionProvider จัดการ...