เนื้อหา
- วิดเจ็ตสำหรับ Android คืออะไร
- โครงการของฉันต้องมีวิดเจ็ตแอปพลิเคชันจริงๆหรือไม่
- วิดเจ็ตสำหรับ Android สามารถปรับปรุงประสบการณ์ผู้ใช้
- มีประสิทธิภาพมากกว่าทางลัดแอปพลิเคชัน
- สร้างวิดเจ็ต Android เพื่อกระตุ้นการมีส่วนร่วมในระยะยาว
- การสร้างวิดเจ็ตแอปคอลเลกชัน
- สร้างเลย์เอาต์ของวิดเจ็ตของคุณ
- การเติมวิดเจ็ตคอลเล็กชัน
- AppWidgetProvider: การกำหนดค่าวิดเจ็ตของคุณ
- สร้างอะแดปเตอร์
- การกำหนดวิธีวงจรชีวิตของวิดเจ็ต
- การดึงเนื้อหาใหม่ด้วย onUpdate
- onEnabled: ทำการตั้งค่าเริ่มต้น
- กำลังล้างข้อมูลด้วยเปิดใช้งาน
- AppWidgetProvider ที่เสร็จสมบูรณ์
- ไฟล์ AppWidgetProviderInfo
- 1. android: ดูตัวอย่างภาพ
- 2. android: widgetCategory
- 3. android: initialLayout
- 4. android: resizeMode =” แนวนอน | แนวตั้ง”
- 5. android: minHeight และ android: minWidth
- 6. android: อัปเดตช่วงเวลามิลลิส
- AppWidgetProviderInfo ที่เสร็จสมบูรณ์
- อย่าเกะกะหน้าจอหลักของผู้ใช้!
- กำลังส่งข้อมูลไปยังวิดเจ็ต
- การลงทะเบียนวิดเจ็ตของคุณใน Manifest
- ใส่วิดเจ็ตของคุณเพื่อทดสอบ
- การสร้างภาพตัวอย่างวิดเจ็ต Android
- วิดเจ็ตที่ปรับแต่งได้: การเพิ่มกิจกรรมการกำหนดค่า
- สร้างกิจกรรมการกำหนดค่า
- ทดสอบโครงการของคุณ
- ห่อ
ตั้งแต่วันแรกของระบบปฏิบัติการวิดเจ็ตสำหรับ Android ได้อนุญาตให้ผู้ใช้มีส่วนร่วมกับแอพที่พวกเขาชื่นชอบจากความสะดวกสบายของหน้าจอหลัก ดังนั้นคุณจะสร้างวิดเจ็ต Android ได้อย่างไร
สำหรับนักพัฒนาวิดเจ็ตทำให้แอปพลิเคชันของคุณมีสถานะที่มีค่าบนหน้าจอโฮมของผู้ใช้ ผู้ใช้จะได้รับการเตือนเกี่ยวกับแอปของคุณ ทุกครั้ง พวกเขามองผ่านหน้าจอหลักของพวกเขา - ในขณะที่ยังได้รับตัวอย่างของเนื้อหาที่น่าสนใจและมีประโยชน์ที่สุดของแอป
วิดเจ็ตทำให้แอปพลิเคชันของคุณมีค่าบนหน้าจอโฮมของผู้ใช้
ในบทความนี้ฉันจะแสดงวิธีการมอบประสบการณ์การใช้งานที่ดีขึ้นแก่ผู้ใช้ในขณะที่สนับสนุนให้ผู้ใช้มีส่วนร่วมกับแอปของคุณโดยการสร้างวิดเจ็ต Android! ในตอนท้ายของบทความนี้คุณจะได้สร้างวิดเจ็ตคอลเลกชันที่เลื่อนได้ซึ่งแสดงชุดข้อมูลที่สมบูรณ์บนหน้าจอโฮมของผู้ใช้
เพื่อให้แน่ใจว่าคุณกำลังแสดงประเภทของวิดเจ็ตที่ผู้ใช้ ต้องการ เพื่อวางบนหน้าจอหลักของพวกเขาเราจะสร้างกิจกรรมการกำหนดค่าซึ่งจะช่วยให้ผู้ใช้สามารถปรับแต่งเนื้อหาลักษณะและคุณสมบัติของวิดเจ็ต ในที่สุดฉันจะแสดงวิธีที่คุณสามารถกระตุ้นให้ผู้คนใช้งานวิดเจ็ตของคุณโดยการสร้างภาพตัวอย่าง Widget ที่แสดงสิ่งที่ดีที่สุดที่วิดเจ็ตของคุณมีให้
อ่านเพิ่มเติม: การพัฒนาสำหรับอุปกรณ์ที่สามารถพับเก็บได้: สิ่งที่คุณต้องรู้
วิดเจ็ตสำหรับ Android คืออะไร
วิดเจ็ตแอปพลิเคชันเป็นแอปพลิเคชันขนาดเล็กน้ำหนักเบาที่อาศัยอยู่บนหน้าจอหลักของผู้ใช้
วิดเจ็ตสำหรับ Android สามารถให้บริการเนื้อหาได้หลากหลาย แต่โดยทั่วไปแล้วจะอยู่ในหมวดหมู่ใดหมวดหนึ่งต่อไปนี้:
- วิดเจ็ตข้อมูล. นี่เป็นวิดเจ็ตที่ไม่สามารถเลื่อนได้ซึ่งแสดงข้อมูลบางอย่างเช่นพยากรณ์อากาศวันนี้หรือวันที่และเวลา
- วิดเจ็ตการรวบรวม. นี่เป็นวิดเจ็ตเลื่อนที่แสดงชุดข้อมูลที่เกี่ยวข้องจัดรูปแบบเป็น ListView, GridView, StackView หรือ AdapterViewFlipper วิดเจ็ตการรวบรวมมักจะได้รับการสนับสนุนโดยแหล่งข้อมูลเช่นฐานข้อมูลหรืออาร์เรย์
- วิดเจ็ตควบคุม. วิดเจ็ตเหล่านี้ทำหน้าที่เป็นรีโมทควบคุมที่ทำให้ผู้ใช้สามารถโต้ตอบกับแอปพลิเคชันของคุณ ไม่มี ต้องนำมันมาที่เบื้องหน้า แอพที่เล่นสื่อเช่นพอดแคสต์หรือเพลงมักมีวิดเจ็ตควบคุมที่อนุญาตให้ผู้ใช้เรียกใช้การเล่นหยุดชั่วคราวและข้ามการกระทำโดยตรงจากหน้าจอหลัก
- วิดเจ็ตไฮบริด. บางครั้งคุณอาจสามารถมอบประสบการณ์การใช้งานที่ดีขึ้นโดยการรวมองค์ประกอบจากหลายหมวดหมู่ ตัวอย่างเช่นหากคุณกำลังพัฒนาวิดเจ็ตควบคุมสำหรับแอปพลิเคชันเพลงคุณสามารถให้ตัวควบคุมเล่นหยุดชั่วคราวและข้าม แต่คุณอาจตัดสินใจที่จะแสดงข้อมูลบางอย่างเช่นชื่อเพลงและศิลปิน หากคุณตัดสินใจที่จะมิกซ์แอนด์แมทช์ก็อย่าไป! วิดเจ็ตมีแนวโน้มที่จะมอบประสบการณ์การใช้งานที่ดีที่สุดเมื่อพวกเขาให้การเข้าถึงข้อมูลขนาดเล็กที่ตรงเวลาข้อมูลที่เกี่ยวข้องหรือคุณสมบัติที่ใช้กันทั่วไปจำนวนเล็กน้อย เพื่อช่วยให้วิดเจ็ตไฮบริดของคุณมีน้ำหนักเบาขอแนะนำให้คุณระบุหมวดหมู่หลักของวิดเจ็ตของคุณพัฒนาตามหมวดหมู่นั้นและ แล้วก็ เพิ่มองค์ประกอบสองสามรายการจากหมวดที่สองของวิดเจ็ต
โครงการของฉันต้องมีวิดเจ็ตแอปพลิเคชันจริงๆหรือไม่
มีสาเหตุหลายประการที่คุณควรพิจารณาเพิ่มวิดเจ็ตแอปพลิเคชันลงในโครงการ Android ของคุณ
วิดเจ็ตสำหรับ Android สามารถปรับปรุงประสบการณ์ผู้ใช้
ตามกฎทั่วไปขั้นตอนการนำทางที่น้อยลงจำเป็นต้องใช้ในการทำงานให้เสร็จสมบูรณ์ยิ่งประสบการณ์ผู้ใช้ที่ดีขึ้น
โดยการนำเสนอแอปพลิเคชันวิดเจ็ตคุณสามารถลบขั้นตอนการนำทางหลายขั้นตอนออกจากโฟลว์ที่ใช้บ่อยที่สุดของแอป ในสถานการณ์กรณีที่ดีที่สุดผู้ใช้ของคุณจะสามารถรับข้อมูลที่ต้องการเพียงแค่จ้องมองที่หน้าจอหลักของพวกเขาหรือทำงานที่ต้องการเพียงแค่แตะปุ่มในวิดเจ็ตควบคุมของคุณ
มีประสิทธิภาพมากกว่าทางลัดแอปพลิเคชัน
วิดเจ็ตแอปมักจะตอบสนองต่อเหตุการณ์ onClick โดยเปิดตัวระดับสูงสุดในแอปพลิเคชันที่เกี่ยวข้องซึ่งคล้ายกับทางลัดแอปพลิเคชัน อย่างไรก็ตามวิดเจ็ตยังสามารถให้การเข้าถึงโดยตรงกับกิจกรรมเฉพาะภายในแอปพลิเคชันเช่นการแตะที่การแจ้งเตือนที่ได้รับใหม่ของวิดเจ็ตอาจเปิดแอพที่เกี่ยวข้องโดยเปิดใหม่แล้ว
ด้วยการฝังลิงก์หลายรายการในการจัดวางวิดเจ็ตของคุณคุณสามารถให้การเข้าถึงหนึ่งเดียวของกิจกรรมที่สำคัญที่สุดของแอพทั้งหมดของคุณโดยการลบขั้นตอนการนำทางเพิ่มเติมจากโฟลว์ที่ใช้บ่อยที่สุดของคุณ
ด้วยการฝังลิงก์หลายรายการในการจัดวางวิดเจ็ตของคุณคุณสามารถให้การเข้าถึงกิจกรรมสำคัญที่สำคัญที่สุดของแอปได้เพียงกดครั้งเดียว
โปรดทราบว่าวิดเจ็ตตอบสนองต่อเหตุการณ์ onClick เท่านั้นซึ่งป้องกันไม่ให้ผู้ใช้โต้ตอบกับวิดเจ็ตของคุณโดยไม่ได้ตั้งใจขณะที่พวกเขากวาดไปรอบ ๆ หน้าจอหลัก ข้อยกเว้นเพียงอย่างเดียวคือเมื่อผู้ใช้พยายามลบวิดเจ็ตของคุณโดยการลากไปยังการดำเนินการลบของหน้าจอหลักของพวกเขาเช่นเดียวกับในสถานการณ์นี้วิดเจ็ตของคุณจะตอบสนองต่อท่าทางการกวาดนิ้วแนวตั้ง
การโต้ตอบนี้ได้รับการจัดการโดยระบบ Android ดังนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับการใช้การรองรับการกวาดนิ้วแนวตั้งด้วยตนเองในวิดเจ็ตของคุณ
สร้างวิดเจ็ต Android เพื่อกระตุ้นการมีส่วนร่วมในระยะยาว
การชักจูงคนให้ดาวน์โหลดแอปของคุณเป็นเพียงขั้นตอนแรกในการสร้างแอปพลิเคชัน Android ที่ประสบความสำเร็จ โอกาสที่จะเกิดขึ้นคือถ้าคุณคว้าสมาร์ทโฟนหรือแท็บเล็ต Android ของคุณและกวาดนิ้วผ่านลิ้นชักแอพคุณจะค้นพบแอปหลายแอปที่คุณไม่ได้ใช้ในหลายวันหลายสัปดาห์หรือหลายเดือน!
อ่านเพิ่มเติม:เริ่มต้นใช้งาน Facebook สำหรับ Android SDK
เมื่อติดตั้งแอปของคุณเรียบร้อยแล้วบนอุปกรณ์ของผู้ใช้คุณจะต้องทำงานอย่างหนักเพื่อให้พวกเขามีส่วนร่วมและเพลิดเพลินกับแอปของคุณ การให้แอปของคุณปรากฏบนหน้าจอโฮมสามารถเป็นเครื่องมืออันทรงพลังที่จะช่วยผลักดันการมีส่วนร่วมในระยะยาวเพียงเพราะมันเป็นเครื่องเตือนใจว่าแอปพลิเคชันของคุณมีอยู่ตลอดเวลา!
วิดเจ็ตที่ได้รับการออกแบบมาเป็นอย่างดีสามารถใช้เป็นโฆษณาสำหรับแอปของคุณได้ ทุกครั้งที่ผู้ใช้มองที่หน้าจอหลักวิดเจ็ตของคุณมีโอกาสที่จะกระตุ้นให้พวกเขามีส่วนร่วมกับแอปของคุณอีกครั้งโดยนำเสนอเนื้อหาที่น่าสนใจและมีประโยชน์ทั้งหมดของแอป
การสร้างวิดเจ็ตแอปคอลเลกชัน
ในบทช่วยสอนนี้เราจะสร้างวิดเจ็ตคอลเล็กชันที่แสดงอาร์เรย์เป็น ListView แบบเลื่อนได้
เพื่อช่วยคุณติดตามอายุการใช้งานของวิดเจ็ตแอพวิดเจ็ตนี้จะเรียกใช้ขนมปังปิ้งต่าง ๆ เมื่อมันเคลื่อนที่ผ่านสภาวะรอบการทำงานที่แตกต่างกัน ในตอนท้ายของบทช่วยสอนนี้เราจะปรับปรุงเครื่องมือของเราด้วยภาพตัวอย่างที่กำหนดเองซึ่งจะแสดงใน Widget Picker ของ Android และกิจกรรมการกำหนดค่าซึ่งจะช่วยให้ผู้ใช้สามารถปรับแต่งวิดเจ็ตก่อนที่จะวางลงบนหน้าจอหลัก
สร้างโครงการ Android ใหม่ด้วยการตั้งค่าที่คุณเลือกและเริ่มต้นกันเลย!
สร้างเลย์เอาต์ของวิดเจ็ตของคุณ
ในการเริ่มต้นให้กำหนดอินเทอร์เฟซผู้ใช้ (UI) ของวิดเจ็ต
วิดเจ็ตของแอปพลิเคชันแสดงขึ้นในกระบวนการ ด้านนอก แอปพลิเคชันของคุณดังนั้นคุณสามารถใช้เลย์เอาต์และมุมมองที่ได้รับการสนับสนุนโดย RemoteViews เท่านั้น
เมื่อสร้างเลย์เอาต์คุณจะถูก จำกัด ดังต่อไปนี้:
- AnalogClock
- ปุ่ม
- นาฬิกาที่บอกเวลาเที่ยงตรง
- FrameLayout
- GridLayout
- ImageButton
- ImageView
- LinearLayout
- ProgressBar
- RelativeLayout
- TextView
- ViewStub
- AdapterViewFlipper
- GridView
- ListView
- StackView
- ViewFlipper
โปรดทราบว่าคลาสย่อยของคลาสด้านบนและมุมมองคือ ไม่ ได้รับการสนับสนุน.
สร้างไฟล์รีซอร์สโครงร่างใหม่ชื่อ list_widget.xml เนื่องจากเราจะแสดงข้อมูลของเราโดยใช้ ListView โครงร่างนี้ส่วนใหญ่ทำหน้าที่เป็นที่เก็บของ ต่อไปเราต้องสร้างผู้ให้บริการข้อมูลสำหรับ ListView ของเรา สร้างคลาส Java ใหม่ชื่อ DataProvider.java และเพิ่มรายการต่อไปนี้: นำเข้า android.content.Context; นำเข้า android.content.Tent; นำเข้า android.widget.RemoteViews; นำเข้า android.widget.RemoteViewsService; นำเข้า java.util.ArrayList; นำเข้า java.util.List; นำเข้าคงที่ android.R.id.text1; นำเข้าหุ่นยนต์คงที่ R.layout.simple_list_item_1; คลาสสาธารณะ DataProvider ใช้ RemoteViewsService.RemoteViewsFactory {รายการ ในการสร้างวิดเจ็ต Android คุณต้องสร้างไฟล์หลายไฟล์ ไฟล์เฉพาะวิดเจ็ตแรกของเราคือ AppWidgetProvider ซึ่งเป็น BroadcastReceiver ที่คุณจะกำหนดวิธีวงจรชีวิตของวิดเจ็ตต่างๆเช่นวิธีที่เรียกว่าเมื่อเครื่องมือของคุณถูกสร้างขึ้นเป็นครั้งแรกและวิธีการที่เรียกว่าเมื่อเครื่องมือนั้นถูกลบในที่สุด สร้างคลาส Java ใหม่ (ไฟล์> ใหม่> คลาส Java) ชื่อ CollectionWidget ในการเริ่มต้นไฟล์ผู้ให้บริการวิดเจ็ตทั้งหมดจะต้องขยายจากคลาส AppWidgetProvider จากนั้นเราจำเป็นต้องโหลดไฟล์ทรัพยากรโครงร่าง list_widget.xml ลงในวัตถุ RemoteViews และแจ้งให้ AppWidgetManager ทราบเกี่ยวกับวัตถุ RemoteViews ที่อัปเดตแล้ว: คลาสสาธารณะ CollectionWidget ขยาย AppWidgetProvider {โมฆะ updateAppWidget คงที่ (บริบทบริบท, AppWidgetManager appWidgetManager, int appWidgetId) {// ยกตัวอย่างวัตถุ RemoteViews // มุมมอง RemoteViews = RemoteViews ใหม่ (บริบท. getPackageName (), R.layout.list_widget setRemoteAdapter (บริบทมุมมอง); // ขอให้ AppWidgetManager อัพเดตวิดเจ็ตแอปพลิเคชัน // appWidgetManager.updateAppWidget (appWidgetId, views); } เนื่องจากเรากำลังแสดงข้อมูลของเราใน ListView เราจำเป็นต้องกำหนดเมธอด setRemoteAdapter () ใน AppWidgetProvider ของเรา setRemoteAdapter () เทียบเท่ากับการเรียก AbsListView.setRemoteViewsAdapter () แต่ถูกออกแบบมาเพื่อใช้ในแอปพลิเคชันวิดเจ็ต ในวิธีนี้เราจำเป็นต้องกำหนด id ของ AdapterView (R.id.widget_list) และเจตนาของบริการที่จะให้ข้อมูลในที่สุดในที่สุด RemoteViewsAdapter ของเรา - เราจะสร้างคลาส WidgetService นี้ในไม่ช้า โมฆะคงส่วนตัว setRemoteAdapter (บริบทบริบท @NonNull มุมมอง RemoteViews สุดท้าย) {views.setRemoteAdapter (R.id.widget_list, เจตนาใหม่ (บริบท WidgetService.class); }} ใน AppWidgetProvider ของเราเราจำเป็นต้องกำหนดวิธีวงจรชีวิตของวิดเจ็ตต่อไปนี้: วิธีระยะเวลาวิดเจ็ต onUpdate () รับผิดชอบการอัปเดต Views ของวิดเจ็ตด้วยข้อมูลใหม่ วิธีนี้เรียกว่าทุกครั้ง: ที่นี่คุณจะต้องลงทะเบียนตัวจัดการเหตุการณ์ที่วิดเจ็ตของคุณควรใช้ เมื่ออัปเดตวิดเจ็ต Android เป็นสิ่งสำคัญที่ต้องจำไว้ว่าผู้ใช้สามารถสร้างวิดเจ็ตเดียวกันหลายอินสแตนซ์ได้ ตัวอย่างเช่นวิดเจ็ตของคุณอาจปรับแต่งได้และผู้ใช้ตัดสินใจที่จะสร้าง“ เวอร์ชั่น” หลายอันที่แสดงข้อมูลที่แตกต่างกันหรือให้การเข้าถึงฟังก์ชั่นที่ไม่ซ้ำใคร เมื่อคุณโทร onUpdate () คุณจะต้องระบุว่าคุณกำลังอัปเดตทุกอินสแตนซ์ของวิดเจ็ตนี้หรือเฉพาะบางอินสแตนซ์เท่านั้น หากคุณต้องการอัปเดตทุกอินสแตนซ์คุณสามารถใช้ appWidgetIds ซึ่งเป็นอาร์เรย์ของ ID ที่ระบุทุกอินสแตนซ์ทั่วทั้งอุปกรณ์ ในตัวอย่างต่อไปนี้ฉันกำลังอัปเดตทุกอินสแตนซ์: @Override โมฆะสาธารณะ onUpdate (บริบทบริบท AppWidgetManager appWidgetManager, int appWidgetIds) {สำหรับ (int appWidgetId: appWidgetIds) {// อัปเดตอินสแตนซ์ทั้งหมดของเครื่องมือนี้ // updateAppWidget } super.onUpdate (บริบท appWidgetManager, appWidgetIds); } โปรดทราบว่าเพื่อช่วยให้รหัสตรงไปตรงมาวิธีการ onUpdate () นี้ไม่ได้ทำการเปลี่ยนแปลงใด ๆ กับวิดเจ็ต ACTION_APPWIDGET_ENABLED ซึ่งจะถูกส่งเมื่อมีการเพิ่มอินสแตนซ์ของวิดเจ็ตของคุณในหน้าจอโฮมสำหรับ เป็นครั้งแรก เวลา. หากผู้ใช้สร้างวิดเจ็ตของคุณสองอินสแตนซ์ onEnabled () จะถูกเรียกใช้เป็นอินสแตนซ์แรก แต่ ไม่ สำหรับวินาที วิธีรอบอายุ onEnabled () เป็นที่ที่คุณควรทำการตั้งค่าใด ๆ ที่จำเป็นสำหรับทุกอินสแตนซ์ของวิดเจ็ตของคุณเช่นการสร้างฐานข้อมูลที่จะดึงข้อมูลวิดเจ็ตของคุณ ฉันจะแสดงขนมปังปิ้งดังนั้นคุณจะเห็นได้อย่างชัดเจนว่าเมื่อใดที่เรียกว่าวงจรชีวิตของวิธีการนี้: @Override โมฆะสาธารณะ onEnabled (บริบทบริบท) {Toast.makeText (บริบท "onEnabled เรียกว่า", Toast.LENGTH_LONG) .show (); } โปรดทราบว่าหากผู้ใช้ลบอินสแตนซ์ทั้งหมดของวิดเจ็ตของคุณแล้วสร้างอินสแตนซ์ใหม่นี่จะถูกจัดประเภทเป็นอินสแตนซ์แรกและเมธอดรอบอายุ onEnabled () จะถูกเรียกอีกครั้ง ACTION_APPWIDGET_DISABLED () วิธีการ onDisabled () เรียกว่าในการตอบสนองต่อ ACTION_APPWIDGET_DISABLED ซึ่งจะถูกเรียกเมื่อผู้ใช้ลบ สุดท้าย อินสแตนซ์ของวิดเจ็ตของคุณ เมธอดรอบอายุวิดเจ็ตนี้เป็นที่ที่คุณควรล้างรีซอร์สใด ๆ ที่คุณสร้างในเมธอด onEnabled () ตัวอย่างเช่นการลบฐานข้อมูลที่คุณสร้างใน onEnabled () เพื่อช่วยให้รหัสของเราตรงไปตรงมาฉันจะแสดงขนมปังปิ้งทุกครั้งที่มีการเรียกใช้วิธีการนี้: @Override โมฆะสาธารณะ onDisabled (บริบทบริบท) {Toast.makeText (บริบท "onDisabled เรียกว่า", Toast.LENGTH_LONG) .show (); } ไฟล์ CollectionWidget ของคุณควรมีลักษณะดังนี้: นำเข้า android.appwidget.AppWidgetManager; นำเข้า android.appwidget.AppWidgetProvider; นำเข้า android.content.Context; นำเข้า androidx.annotation.NonNull; นำเข้า android.content.Tent; นำเข้า android.widget.RemoteViews; นำเข้า android.widget.Toast; // ขยายจากคลาส AppWidgetProvider // คลาสสาธารณะ CollectionWidget ขยาย AppWidgetProvider {เป็นโมฆะคงที่คงที่ updateAppWidget (บริบทบริบท AppWidgetManager appWidgetManager, appWidgetId), int //WidgetProvider บริบท getPackageName (), R.layout.list_widget); setRemoteAdapter (บริบทมุมมอง); // แจ้ง AppWidgetManager เกี่ยวกับวัตถุ RemoteViews // appWidgetManager.updateAppWidget (appWidgetId, มุมมอง); } @Override โมฆะสาธารณะ onUpdate (บริบทบริบท, AppWidgetManager appWidgetManager, int appWidgetIds) {สำหรับ (int appWidgetId: appWidgetIds) {updateAppWidget (บริบท appWidgetManager, appWidgetId); } super.onUpdate (บริบท appWidgetManager, appWidgetIds); } @Override โมฆะสาธารณะ onEnabled (บริบทบริบท) {Toast.makeText (บริบท "onEnabled เรียกว่า", Toast.LENGTH_LONG) .show (); } @Override โมฆะสาธารณะ onDisabled (บริบทบริบท) {Toast.makeText (บริบท "onDisabled เรียกว่า", Toast.LENGTH_LONG) .show (); } โมฆะส่วนตัวคง setRemoteAdapter (บริบทบริบท @NonNull มุมมอง RemoteViews สุดท้าย) {views.setRemoteAdapter (R.id.widget_list, เจตนาใหม่ (บริบท WidgetService.class); }} วิดเจ็ตแอปพลิเคชันของคุณยังต้องการไฟล์ AppWidgetProviderInfo ซึ่งกำหนดคุณสมบัติที่สำคัญหลายประการรวมถึงขนาดขั้นต่ำของวิดเจ็ตและความถี่ที่ควรอัปเดต ไฟล์ AppWidgetProviderInfo ถูกเก็บไว้ในโฟลเดอร์ res / xml ของโครงการของคุณ หากโครงการของคุณไม่มีโฟลเดอร์นี้อยู่คุณจะต้องสร้างมันขึ้นมา: จากนั้นสร้างไฟล์ collection_widget_info ซึ่งเราจะใช้เป็น AppWidgetProviderInfo ของเรา: ในไฟล์ AppWidgetProviderInfo ของเราเราต้องกำหนดคุณสมบัติต่อไปนี้: นี่คือ drawable ที่แสดงวิดเจ็ตแอปพลิเคชันของคุณใน Widget Picker ของอุปกรณ์การเติมวิดเจ็ตคอลเล็กชัน
AppWidgetProvider: การกำหนดค่าวิดเจ็ตของคุณ
สร้างอะแดปเตอร์
การกำหนดวิธีวงจรชีวิตของวิดเจ็ต
การดึงเนื้อหาใหม่ด้วย onUpdate
onEnabled: ทำการตั้งค่าเริ่มต้น
กำลังล้างข้อมูลด้วยเปิดใช้งาน
AppWidgetProvider ที่เสร็จสมบูรณ์
ไฟล์ AppWidgetProviderInfo
1. android: ดูตัวอย่างภาพ
หากคุณไม่ได้แสดงตัวอย่างภาพหน้าจอ Android จะใช้ไอคอนแอปพลิเคชันของคุณแทน เพื่อส่งเสริมให้ผู้ใช้เลือกวิดเจ็ตของคุณจาก Widget Picker คุณควรระบุ drawable ที่แสดงว่าวิดเจ็ตของคุณจะดูอย่างไรเมื่อมีการกำหนดค่าอย่างถูกต้องบนหน้าจอหลักของผู้ใช้
วิธีที่ง่ายที่สุดในการสร้างภาพตัวอย่างคือใช้แอปพลิเคชัน Widget Preview ที่รวมอยู่ในโปรแกรมจำลอง Android แอพนี้ให้คุณกำหนดค่าวิดเจ็ตของคุณแล้วสร้างภาพซึ่งคุณสามารถใช้ในโครงการ Android ของคุณ
เราจะสร้างภาพนี้เมื่อเราสร้างวิดเจ็ตของเราเสร็จแล้วดังนั้นตอนนี้ฉันจะใช้ทรัพยากร mipmap / ic_launcher ที่สร้างขึ้นโดยอัตโนมัติเป็นภาพตัวอย่างชั่วคราว
2. android: widgetCategory
วิดเจ็ตของแอปพลิเคชันจะต้องอยู่ใน App Widget Host ซึ่งโดยปกติจะเป็นหน้าจอหลักของ Android แต่สามารถเป็นตัวเรียกใช้จากบุคคลที่สามเช่น Evie Launcher หรือ Nova Launcher
ระหว่าง API ระดับ 17 และ 20 เป็นไปได้ที่จะวางวิดเจ็ตแอปพลิเคชันบนหน้าจอหลัก หรือ lockscreen แต่การสนับสนุน lockscreen ไม่รองรับใน API ระดับ 21
คุณสามารถระบุได้ว่าแอพพลิเคชั่นของคุณสามารถวางบนหน้าจอหลัก, หน้าจอล็อค (ซึ่ง Android อ้างถึงเป็น "ผู้พิทักษ์") หรือทั้งสองอย่างโดยใช้แอนดรอยด์ android: widgetCategory เนื่องจากเป็นไปไม่ได้ที่จะวางวิดเจ็ตบนหน้าจอล็อกใน Android เวอร์ชันล่าสุดเราจะกำหนดเป้าหมายที่หน้าจอหลักเท่านั้น
เพื่อรักษาความเป็นส่วนตัวของผู้ใช้วิดเจ็ตของคุณไม่ควรแสดงข้อมูลที่ละเอียดอ่อนหรือข้อมูลส่วนตัวใด ๆ เมื่อวางไว้ในหน้าจอล็อค
หากคุณให้ผู้ใช้มีตัวเลือกในการวางวิดเจ็ตของคุณบนหน้าจอล็อคใครก็ตามที่เหลือบไปที่อุปกรณ์ของผู้ใช้อาจเห็นวิดเจ็ตของคุณและเนื้อหาทั้งหมดของมัน เพื่อช่วยรักษาความเป็นส่วนตัวของผู้ใช้วิดเจ็ตของคุณไม่ควรแสดงข้อมูลที่ละเอียดอ่อนหรือข้อมูลส่วนตัวใด ๆ เมื่อวางบนหน้าจอล็อค หากวิดเจ็ตของคุณมีข้อมูลส่วนบุคคลคุณอาจต้องการจัดเตรียมเค้าโครงหน้าจอหลักและหน้าจอล็อกแยกต่างหาก
3. android: initialLayout
นี่คือไฟล์ทรัพยากรรูปแบบที่วิดเจ็ตของคุณควรใช้เมื่อวางไว้บนหน้าจอโฮมซึ่งสำหรับโครงการของเราคือ list_widget.xml
4. android: resizeMode =” แนวนอน | แนวตั้ง”
แอตทริบิวต์ android: resizeMode ให้คุณระบุว่าวิดเจ็ตของคุณสามารถปรับขนาดแนวนอนแนวตั้งหรือตามแกนทั้งสอง
เพื่อให้แน่ใจว่าวิดเจ็ตของคุณแสดงและทำงานอย่างถูกต้องในหลากหลายหน้าจอขอแนะนำให้คุณปรับขนาดวิดเจ็ตในแนวนอน และ ในแนวตั้งเว้นแต่คุณจะมีเหตุผลเฉพาะที่จะไม่ทำ
5. android: minHeight และ android: minWidth
หากวิดเจ็ตของคุณสามารถปรับขนาดได้คุณต้องตรวจสอบให้แน่ใจว่าผู้ใช้จะไม่ย่อขนาดวิดเจ็ตของคุณไปยังจุดที่ไม่สามารถใช้งานได้ คุณสามารถใช้แอตทริบิวต์ minHeight และ minWidth เพื่อกำหนดแอปที่เล็กที่สุดของคุณจะย่อขนาดลงเมื่อผู้ใช้ถูกปรับขนาด
ค่าเหล่านี้ยังแสดงถึงขนาดเริ่มต้นของวิดเจ็ตของคุณดังนั้นหากวิดเจ็ตของคุณไม่สามารถปรับขนาดได้ดังนั้น minHeight และ minWidth จะกำหนดขนาดถาวรของวิดเจ็ต
6. android: อัปเดตช่วงเวลามิลลิส
AppWidgetProviderInfo เป็นที่ที่คุณจะระบุว่าวิดเจ็ตของคุณควรร้องขอข้อมูลใหม่ ๆ บ่อยเพียงใด
ช่วงเวลาอัปเดตที่เล็กที่สุดที่รองรับคือหนึ่งครั้งทุก ๆ 1800000 มิลลิวินาที (30 นาที) แม้ว่าคุณจะประกาศช่วงเวลาการอัปเดตที่สั้นลงวิดเจ็ตของคุณจะยังคงอัปเดตทุกๆครึ่งชั่วโมงเท่านั้น
ในขณะที่คุณอาจต้องการแสดงข้อมูลล่าสุดโดยเร็วที่สุดระบบ จะ ปลุกอุปกรณ์สลีปเพื่อรับข้อมูลใหม่ การอัปเดตเป็นประจำสามารถเบิร์นแบตเตอรีของอุปกรณ์โดยเฉพาะอย่างยิ่งในช่วงเวลาที่อุปกรณ์ไม่ได้ใช้งานเป็นระยะเวลานานเช่นข้ามคืน การมอบประสบการณ์ผู้ใช้ที่ดีที่สุดหมายถึงการสร้างสมดุลระหว่างการ จำกัด การใช้แบตเตอรี่และให้ข้อมูลใหม่ภายในกรอบเวลาที่เหมาะสม
คุณควรคำนึงถึงประเภทของเนื้อหาที่วิดเจ็ตของคุณจะแสดง
คุณควรคำนึงถึงประเภทของเนื้อหาที่วิดเจ็ตสำหรับ Android ของคุณจะแสดง ตัวอย่างเช่นวิดเจ็ตสภาพอากาศอาจต้องดึงการพยากรณ์ที่อัปเดตวันละครั้งในขณะที่แอปที่แสดงข่าวด่วนจะต้องอัปเดตบ่อยขึ้น
ในการค้นหาสมดุลที่สมบูรณ์แบบนี้คุณอาจต้องทดสอบวิดเจ็ตของคุณในช่วงความถี่การอัปเดตที่หลากหลายและวัดผลกระทบที่มีต่ออายุการใช้งานแบตเตอรี่และความตรงต่อเวลาของเนื้อหาวิดเจ็ตของคุณ หากคุณมีกลุ่มผู้ทดสอบที่เต็มใจคุณสามารถตั้งค่าการทดสอบ A / B เพื่อดูว่าความถี่การอัปเดตบางรายการได้รับผลบวกมากกว่าแบบทดสอบอื่นหรือไม่
Aalso อ่าน: AndroidManifest.xml ทุกสิ่งที่คุณจำเป็นต้องรู้
ในที่สุดเมื่อคุณระบุช่วงเวลาการอัพเดทที่สมบูรณ์แบบแล้วคุณอาจต้องการใช้ช่วงเวลาที่สั้นลงเมื่อพัฒนาและทดสอบแอปของคุณ ตัวอย่างเช่นคุณสามารถใช้ความถี่การอัปเดตที่สั้นที่สุด (android: updatePeriodMillis =” 1800000″) เมื่อคุณทดสอบว่าวิธี onUpdate () ของแอปกำลังทำงานอย่างถูกต้องจากนั้นเปลี่ยนค่านี้ก่อนปล่อยแอปของคุณสู่สาธารณะทั่วไป
AppWidgetProviderInfo ที่เสร็จสมบูรณ์
ไฟล์ collection_widget_info.xml ที่เสร็จสิ้นแล้วควรมีลักษณะดังนี้:
อย่าเกะกะหน้าจอหลักของผู้ใช้!
เพื่อให้แน่ใจว่าหน้าจอหลักจะไม่รกเราจะเพิ่มช่องว่างและระยะขอบลงในวิดเจ็ตของเรา หากโครงการของคุณไม่มีไฟล์ dimens.xml อยู่แล้วคุณจะต้องสร้างไฟล์ขึ้นมา:
- คลิกควบคุมโฟลเดอร์ค่าของโครงการ
- เลือกใหม่> ไฟล์ทรัพยากรค่า
- ตั้งชื่อไฟล์เป็น dimens
- คลิกตกลง
เปิดไฟล์ dimens.xml ของคุณและกำหนดค่าระยะขอบและช่องว่างภายในต่อไปนี้:
กำลังส่งข้อมูลไปยังวิดเจ็ต
ต่อไปเราต้องสร้างบริการวิดเจ็ตซึ่งจะรับผิดชอบในการส่งข้อมูลการเก็บรวบรวมของเราไปยังวิดเจ็ต
สร้างคลาส Java ใหม่ (ใหม่> คลาส Java) ชื่อ WidgetService และเพิ่มรายการต่อไปนี้:
นำเข้า android.content.Tent; นำเข้า android.widget.RemoteViewsService; WidgetService ระดับสาธารณะขยาย RemoteViewsService {@Override สาธารณะ RemoteViewsFactory onGetViewFactory (เจตนาเจตนา) {คืน DataProvider ใหม่ (นี่เจตนา); }}
การลงทะเบียนวิดเจ็ตของคุณใน Manifest
ตอนนี้เราต้องทำการเปลี่ยนแปลงบางอย่างกับรายการของโครงการของเรา
ในการเริ่มต้นให้เปิดรายการและลงทะเบียนวิดเจ็ตของคุณเป็น BroadcastReceiver เราจำเป็นต้องเพิ่มตัวกรองเจตนาสำหรับการกระทำ android.appwidget.action.APPWIDGET_UPDATE:
ถัดไปคุณต้องระบุผู้ให้บริการวิดเจ็ตแอพ:
ในที่สุดเราจำเป็นต้องประกาศบริการที่จะส่งข้อมูลไปยังวิดเจ็ตของเราซึ่งในกรณีนี้คือคลาส WidgetService บริการนี้ต้องได้รับอนุญาต android.permission.BIND_REMOTEVIEWS:
ใส่วิดเจ็ตของคุณเพื่อทดสอบ
หากคุณได้รับการติดตามพร้อมกับบทช่วยสอนนี้ตอนนี้คุณจะมีวิดเจ็ตคอลเลกชันสมบูรณ์ที่แสดงชุดข้อมูลบนหน้าจอหลักของผู้ใช้
หากนี่เป็นโครงการ Android ในชีวิตจริงคุณมักจะขยายวิธีการวงจรชีวิตโดยเฉพาะอย่างยิ่งวิธี onUpdate () แต่นี่คือทั้งหมดที่เราจำเป็นต้องสร้างเครื่องมือที่คุณสามารถติดตั้งและทดสอบบนอุปกรณ์ Android ของคุณ:
- ติดตั้งโครงการนี้บนสมาร์ทโฟน Android แท็บเล็ตหรือ AVD (อุปกรณ์เสมือน Android ที่ใช้งานร่วมกันได้)
- กดส่วนที่ว่างของหน้าจอโฮมค้างไว้และเลือกวิดเจ็ตเมื่อได้รับแจ้ง นี่เป็นการเรียกใช้ตัวเลือก Widget
- ปัดผ่านตัวเลือกเครื่องมือจนกว่าคุณจะพบวิดเจ็ตแอปพลิเคชันที่คุณเพิ่งสร้างขึ้น
- กดวิดเจ็ตนี้ค้างไว้เพื่อเพิ่มลงในหน้าจอหลักของคุณ
- เนื่องจากนี่เป็นอินสแตนซ์แรกของวิดเจ็ตนี้วิธี onEnabled () จึงควรรันและคุณจะเห็นขนมปังปิ้ง“ onEnabled เรียกว่า”
- ปรับขนาดวิดเจ็ตของคุณ หากคุณตั้งค่าขนาดต่ำสุดที่รองรับให้ตรวจสอบว่าคุณไม่สามารถย่อขนาดวิดเจ็ตเกินค่านี้
- ทดสอบว่า ListView เลื่อนตามที่คาดไว้
- ถัดไปคุณควรตรวจสอบวิธีการ onDisabled () โดยการลบวิดเจ็ตของคุณ กดค้างที่วิดเจ็ตจากนั้นเลือกลบจากหน้าจอหลัก เนื่องจากนี่เป็นอินสแตนซ์สุดท้ายของวิดเจ็ตนี้วิธี onDisabled () จึงควรทำงานและคุณจะเห็นขนมปังปิ้ง“ onDisabled เรียกว่า”
นี่คือทั้งหมดที่คุณต้องใช้เพื่อส่งมอบวิดเจ็ตแอปพลิเคชัน Android ที่ใช้งานได้ แต่มีบางส่วนเพิ่มเติมที่มักจะปรับปรุงประสบการณ์การใช้งานของผู้ใช้ ในส่วนต่อไปนี้เราจะแนะนำให้ผู้ใช้เลือกวิดเจ็ตนี้จาก Widget Picker โดยสร้างภาพตัวอย่างที่แสดงเครื่องมือที่ดีที่สุด ฉันจะแสดงวิธีสร้างวิดเจ็ตที่ปรับแต่งได้อย่างสมบูรณ์โดยเพิ่มกิจกรรมการกำหนดค่าในโครงการของคุณ
การสร้างภาพตัวอย่างวิดเจ็ต Android
หากคุณคว้าอุปกรณ์ Android ของคุณและปัดผ่าน Widget Picker คุณจะเห็นว่าทุกวิดเจ็ตแสดงด้วยภาพซึ่งมักแสดงให้เห็นว่าวิดเจ็ตนี้จะดูอย่างไรเมื่อตั้งค่าบนหน้าจอหลักของผู้ใช้
เพื่อกระตุ้นให้ผู้ใช้เลือกวิดเจ็ตของคุณคุณควรจัดเตรียมรูปภาพตัวอย่างที่เน้นข้อมูลและฟีเจอร์ที่เป็นประโยชน์ทั้งหมดที่วิดเจ็ตของคุณมีให้
คุณสามารถสร้างภาพตัวอย่างได้อย่างรวดเร็วและง่ายดายโดยใช้แอปพลิเคชัน Widget Preview ที่รวมอยู่ในโปรแกรมจำลอง Android
โปรดทราบว่า Widget Preview ไม่ได้รวมอยู่ในอิมเมจระบบ Android ล่าสุดดังนั้นคุณจะต้องสร้าง AVD โดยใช้ Nougat (ระดับ API 25) หรือเก่ากว่า:
- ติดตั้งแอปพลิเคชันของคุณบน AVD ที่ใช้ API 25 หรือต่ำกว่า
- เปิดลิ้นชักแอปของ AVD และเปิดแอป Widget Preview
- Widget Preview จะแสดงรายการทุกแอปพลิเคชันที่ติดตั้งบน AVD นี้ เลือกแอปพลิเคชันของคุณจากรายการ
- วิดเจ็ตของคุณจะปรากฏบนพื้นหลังที่ว่างเปล่า ใช้เวลาในการปรับขนาดและปรับแต่งวิดเจ็ตของคุณจนกว่าจะแสดงสิ่งที่ดีที่สุดที่วิดเจ็ตของคุณมีให้
- เมื่อคุณพอใจกับรูปลักษณ์และเนื้อหาของวิดเจ็ตแล้วให้เลือกถ่ายภาพ
- หากต้องการดึงสแน็ปช็อตของคุณให้สลับกลับไปที่ Android Studio และเลือกดู> เครื่องมือ Windows> Device File Explorer จากแถบเครื่องมือ นี่เป็นการเปิดตัว Device File ของ Android Studio
- ใน Device File Explorer ไปที่ sdcard / ดาวน์โหลด คุณควรพบภาพตัวอย่างที่บันทึกในรูปแบบต่อไปนี้: _ori_.png
- ลากภาพนี้ออกจาก Android Studio และวางในที่ที่เข้าถึงได้ง่ายเช่นเดสก์ท็อปของคุณ
- ตั้งชื่อที่สื่อความหมายให้กับไฟล์ภาพนี้
- ลากและวางไฟล์ลงในโฟลเดอร์ที่สามารถถอดได้ของโครงการ
- เปิด AppWidgetProviderInfo ของคุณซึ่งสำหรับโครงการนี้คือ collection_widget_info.xml
- ค้นหา android: previewImage =” @ mipmap / ic_launcher” line แล้วอัปเดตเพื่ออ้างอิงภาพตัวอย่างของคุณ
วิดเจ็ตของคุณจะใช้แหล่งรูปภาพใหม่นี้เป็นภาพตัวอย่าง:
- ติดตั้งโครงการที่อัปเดตบนอุปกรณ์ Android จริงหรือ AVD ของคุณ
- กดส่วนที่ว่างใด ๆ ของหน้าจอหลักค้างไว้นาน ๆ
- แตะวิดเจ็ตซึ่งเปิดใช้งานเครื่องมือตัวเลือก
- เลื่อนไปที่วิดเจ็ตของคุณ ตอนนี้มันควรจะใช้ภาพตัวอย่างที่อัพเดทแล้ว
วิดเจ็ตที่ปรับแต่งได้: การเพิ่มกิจกรรมการกำหนดค่า
กิจกรรมการกำหนดค่าจะเริ่มต้นโดยอัตโนมัติเมื่อผู้ใช้วางวิดเจ็ตของคุณบนหน้าจอโฮม
มีสาเหตุหลายประการที่คุณอาจต้องการเพิ่มกิจกรรมการกำหนดค่าในโครงการของคุณ
วิดเจ็ตมีแนวโน้มที่จะมอบประสบการณ์ผู้ใช้ที่ดีที่สุดเมื่อพวกเขาให้การเข้าถึงข้อมูลหรือคุณสมบัติที่สำคัญที่สุดสำหรับผู้ใช้แต่ละคน
ประการแรกวิดเจ็ตบางตัวต้องการการตั้งค่าเริ่มต้นตัวอย่างเช่นวิดเจ็ตที่แสดงการเตือนการจราจรอาจจำเป็นต้องรู้ที่อยู่บ้านของผู้ใช้ที่ทำงานและเวลาที่พวกเขาเดินทาง วิดเจ็ตของคุณอาจไร้ประโยชน์อย่างสมบูรณ์หากไม่มีวิธีป้อนข้อมูลนี้!
นอกจากนี้วิดเจ็ตมีแนวโน้มที่จะมอบประสบการณ์การใช้งานที่ดีที่สุดเมื่อพวกเขาให้การเข้าถึงข้อมูลหรือคุณสมบัติที่สำคัญที่สุดสำหรับผู้ใช้แต่ละคน โดยการเพิ่มกิจกรรมการกำหนดค่าในโครงการของคุณคุณสามารถให้อิสระแก่ผู้ใช้ในการเลือกและเลือก อย่างแน่นอน สิ่งที่รวมอยู่ในวิดเจ็ตของคุณ
แม้แต่การปรับแต่งที่ค่อนข้างตรงไปตรงมาเช่นการเปลี่ยนพื้นหลังหรือแบบอักษรของวิดเจ็ตอาจมีผลกระทบในเชิงบวกต่อประสบการณ์การใช้งานของผู้ใช้ - ไม่มีใครที่จะชื่นชมวิดเจ็ตที่ปะทะกับหน้าจอหลักที่เหลือ!
ไม่มีใครจะซาบซึ้งวิดเจ็ตที่ปะทะกับหน้าจอที่เหลือของพวกเขา!
หรือบางครั้งคุณอาจมีรายการเนื้อหายาว ๆ ที่คุณต้องการรวมไว้ในวิดเจ็ตของคุณและคุณกำลังพยายาม จำกัด ตัวเลือกของคุณให้แคบลง กิจกรรมการกำหนดค่าอาจเป็นวิธีหนึ่งในการนำความคิดของคุณไปใช้ให้เกิดประโยชน์ การสร้าง วิดเจ็ตที่รกและสับสน เพียงจำไว้ว่าการตั้งค่าวิดเจ็ตไม่น่าจะเป็นงานที่น่าเบื่อดังนั้นหากคุณมีกิจกรรมการกำหนดค่าแนะนำให้คุณ จำกัด ตัวคุณเองเป็นสามตัวเลือกการกำหนดค่า
มาเพิ่มกิจกรรมการกำหนดค่าในโครงการของเรา!
ประการแรกกิจกรรมการกำหนดค่าของเราต้องการโครงร่างดังนั้นสร้างไฟล์ทรัพยากรเลย์เอาต์ใหม่ชื่อ config_activity.xml
ฉันจะเพิ่มปุ่มต่อไปนี้ในเค้าโครงนี้:
- ปุ่มกำหนดค่า. ในโครงการในชีวิตจริงปุ่มนี้จะแก้ไขวิดเจ็ตในทางใดทางหนึ่งตัวอย่างเช่นการเพิ่มหรือลบเนื้อหาหรือเปลี่ยนความถี่ในการอัพเดทวิดเจ็ต เพื่อช่วยให้รหัสของเราตรงไปตรงมาการคลิกปุ่มนี้จะเป็นการแสดงตัวเลือกการกำหนดค่าขนมปัง
- ปุ่มตั้งค่า. เมื่อผู้ใช้มีความสุขกับการกำหนดค่าเครื่องมือของพวกเขาการกดปุ่มนี้จะทำให้เครื่องมือที่กำหนดค่าใหม่บนหน้าจอหลักของพวกเขา
นี่คือไฟล์ config_activity.xml ที่ฉันทำเสร็จ:
สร้างกิจกรรมการกำหนดค่า
ตอนนี้เราต้องสร้างกิจกรรมการกำหนดค่าของเรา
ในการเริ่มต้นให้สร้างคลาส Java ใหม่ชื่อ ConfigActivity ในกิจกรรมนี้เราจะเรียกแอป ID วิดเจ็ตจากเจตนาที่เปิดตัวกิจกรรมการกำหนดค่า หากเจตนานี้ไม่มี ID วิดเจ็ตเราจะต้องเรียกวิธีเสร็จสิ้น ():
เจตนาเจตนา = getIntent (); ชุดรวมพิเศษ = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {เสร็จสิ้น (); }
ต่อไปเราจำเป็นต้องสร้างความตั้งใจที่จะส่งคืนผ่านแอพเดิมgetgetและตั้งค่าผลลัพธ์จากกิจกรรมการกำหนดค่า:
Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); เสร็จสิ้น(); }}}
หากคุณจัดเตรียมกิจกรรมการกำหนดค่าดังนั้น ACTION_APPWIDGET_UPDATE การออกอากาศจะไม่ถูกส่งโดยอัตโนมัติเมื่อเปิดใช้งานกิจกรรมการกำหนดค่าซึ่งหมายถึงวิธี onUpdate () เคยชิน ถูกเรียกเมื่อผู้ใช้สร้างอินสแตนซ์ของวิดเจ็ตของคุณ
เพื่อให้แน่ใจว่าวิดเจ็ตของคุณสร้างขึ้นด้วยข้อมูลและเนื้อหาล่าสุดกิจกรรมการกำหนดค่าของคุณ ต้อง ทริกเกอร์คำขอ onUpdate () ครั้งแรก
นี่คือ ConfigActivity ที่เสร็จสมบูรณ์:
นำเข้า android.app.Activity; นำเข้า android.appwidget.AppWidgetManager; นำเข้า android.os.Bundle; นำเข้า android.widget.Button; นำเข้า android.content.Tent; นำเข้า android.view.View; นำเข้า android.view.ViewOnClickListener; นำเข้า android.widget.Toast; ConfigActivity ระดับสาธารณะจะขยายกิจกรรม {@Override โมฆะที่ป้องกัน onCreate (บันเดิลที่บันทึกไว้InstanceState) {super.onCreate (hiddenInstanceState) ที่บันทึกไว้; setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); ปุ่ม setupWidget = (ปุ่ม) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (ใหม่ OnClickListener () {@Override โมฆะสาธารณะ onClick (ดู v) {handleSetupWidget ();}}); ปุ่ม configButton = (ปุ่ม) findViewById (R.id.configButton); configButton.setOnClickListener (ใหม่ OnClickListener () {@Override โมฆะสาธารณะ onClick (ดู v) {handleConfigWidget ();}}); } ส่วนตัวโมฆะ handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "ตัวเลือกการกำหนดค่า", Toast.LENGTH_LONG) .show (); } int appWidgetId; โมฆะส่วนตัว showAppWidget () {appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; เจตนาเจตนา = getIntent (); ชุดรวมพิเศษ = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {เสร็จสิ้น (); } // TO DO: ทำการตั้งค่า // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); เสร็จสิ้น(); }}}
เมื่อคุณสร้างกิจกรรมการกำหนดค่าแล้วคุณต้องประกาศกิจกรรมนี้ในรายการและระบุว่าจะยอมรับการกระทำของ APPWIDGET_CONFIGURE:
ท้ายที่สุดเนื่องจากกิจกรรมการกำหนดค่าถูกอ้างอิงนอกขอบเขตของแพ็คเกจเราจึงต้องประกาศกิจกรรมนี้ใน AppWidgetProviderInfo ของเราซึ่งในกรณีนี้คือไฟล์ collection_widget_info.xml:
หุ่นยนต์: การกำหนดค่า = "com.jessicathornsby.collectionwidget.ConfigActivity">
ทดสอบโครงการของคุณ
ตอนนี้ถึงเวลาที่จะนำโปรเจ็กต์ที่เสร็จแล้วของคุณไปทดสอบ:
- ติดตั้งโครงการที่อัปเดตของคุณบนอุปกรณ์ Android จริงหรือ AVD
- ลบอินสแตนซ์ก่อนหน้าทั้งหมดของวิดเจ็ตของคุณเพื่อให้แน่ใจว่าคุณกำลังทำงานกับเวอร์ชันล่าสุด
- กดพื้นที่ว่างของหน้าจอหลักค้างไว้และเลือกวิดเจ็ตเมื่อได้รับแจ้ง
- ค้นหาวิดเจ็ตของคุณใน Widget Picker และกดแบบยาวเพื่อเลือก
- วางวิดเจ็ตลงบนหน้าจอหลักของคุณ กิจกรรมการกำหนดค่าควรเปิดโดยอัตโนมัติ
- คลิกปุ่มทำการตั้งค่าบางอย่างและขนมปังปิ้งตัวเลือกการกำหนดค่าควรปรากฏขึ้นเพื่อยืนยันว่าการโต้ตอบนี้ได้รับการลงทะเบียนเรียบร้อยแล้ว
- ลองนึกภาพว่าคุณได้ปรับแต่งการตั้งค่าวิดเจ็ตและพร้อมที่จะวางบนหน้าจอหลักของคุณ ให้แตะสร้างปุ่มวิดเจ็ตและควรสร้างวิดเจ็ตนี้ให้สำเร็จ
คุณสามารถดาวน์โหลดโครงการวิดเจ็ตคอลเลกชันที่เสร็จสมบูรณ์จาก GitHub
ห่อ
ในบทความนี้เราได้สร้างวิดเจ็ตคอลเลกชันที่เลื่อนได้ซึ่งแสดงชุดข้อมูลบนหน้าจอหลักของผู้ใช้
หากคุณต้องการทำงานกับโครงการนี้ต่อไปคุณสามารถลองเพิ่มรหัสของคุณเองในเมธอด onUpdate () เพื่อสร้างวิดเจ็ตที่อัพเดตด้วยข้อมูลใหม่ตามช่วงเวลาที่กำหนดไว้ในไฟล์ AppWidgetProviderInfo ของคุณ (collection_widget_info)
หากคุณสร้างวิดเจ็ต Android อย่าลืมแบ่งปันผลงานของคุณในความคิดเห็นด้านล่าง!