สร้างวิดเจ็ต Android สำหรับแอปของคุณ

ผู้เขียน: Lewis Jackson
วันที่สร้าง: 13 พฤษภาคม 2021
วันที่อัปเดต: 1 กรกฎาคม 2024
Anonim
แต่ง Widget และ ICON APP บน Android ง่ายๆ!!!! [IOS 14 on Android] aesthetic | KAYIAM
วิดีโอ: แต่ง Widget และ ICON APP บน Android ง่ายๆ!!!! [IOS 14 on Android] aesthetic | KAYIAM

เนื้อหา


ตั้งแต่วันแรกของระบบปฏิบัติการวิดเจ็ตสำหรับ 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 {รายการ myListView = new ArrayList <> (); บริบท mContext = null; DataProvider สาธารณะ (บริบทบริบท, เจตนาเจตนา) {mContext = บริบท; } @Override โมฆะสาธารณะ onCreate () {initData (); } @Override โมฆะสาธารณะ onDataSetChanged () {initData (); } @Override โมฆะสาธารณะ onDestroy () {} @Override public int getCount () {return myListView.size (); } @Override RemoteViews สาธารณะ getViewAt (ตำแหน่ง int) {มุมมอง RemoteViews = RemoteViews ใหม่ (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (ข้อความ 1, myListView.get (ตำแหน่ง)); กลับมาดู; } @Override public RemoteViews getLoadingView () {return null; } @Override public int getViewTypeCount () {return 1; } @Override สาธารณะ getItemId long (ตำแหน่ง int) {ส่งคืนตำแหน่ง; } @Override บูลีสาธารณะ public hasStableIds () {return true; } private void initData () {myListView.clear (); สำหรับ (int i = 1; i <= 15; i ++) {myListView.add ("รายการมุมมองรายการ" + i); }}}

AppWidgetProvider: การกำหนดค่าวิดเจ็ตของคุณ

ในการสร้างวิดเจ็ต 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

วิธีระยะเวลาวิดเจ็ต onUpdate () รับผิดชอบการอัปเดต Views ของวิดเจ็ตด้วยข้อมูลใหม่

วิธีนี้เรียกว่าทุกครั้ง:

  • ผู้ใช้ทำการดำเนินการที่เรียกใช้เมธอด onUpdate () ด้วยตนเอง
  • ช่วงเวลาอัปเดตที่ระบุของแอปพลิเคชันผ่านไปแล้ว
  • ผู้ใช้วางอินสแตนซ์ใหม่ของวิดเจ็ตนี้บนหน้าจอหลัก
  • ACTION_APPWIDGET_RESTORED ความตั้งใจออกอากาศจะถูกส่งไปยัง AppWidgetProvider ความตั้งใจในการออกอากาศนี้จะถูกเรียกใช้หากวิดเจ็ตถูกกู้คืนจากการสำรองข้อมูล

ที่นี่คุณจะต้องลงทะเบียนตัวจัดการเหตุการณ์ที่วิดเจ็ตของคุณควรใช้

เมื่ออัปเดตวิดเจ็ต Android เป็นสิ่งสำคัญที่ต้องจำไว้ว่าผู้ใช้สามารถสร้างวิดเจ็ตเดียวกันหลายอินสแตนซ์ได้ ตัวอย่างเช่นวิดเจ็ตของคุณอาจปรับแต่งได้และผู้ใช้ตัดสินใจที่จะสร้าง“ เวอร์ชั่น” หลายอันที่แสดงข้อมูลที่แตกต่างกันหรือให้การเข้าถึงฟังก์ชั่นที่ไม่ซ้ำใคร

เมื่อคุณโทร onUpdate () คุณจะต้องระบุว่าคุณกำลังอัปเดตทุกอินสแตนซ์ของวิดเจ็ตนี้หรือเฉพาะบางอินสแตนซ์เท่านั้น หากคุณต้องการอัปเดตทุกอินสแตนซ์คุณสามารถใช้ appWidgetIds ซึ่งเป็นอาร์เรย์ของ ID ที่ระบุทุกอินสแตนซ์ทั่วทั้งอุปกรณ์

ในตัวอย่างต่อไปนี้ฉันกำลังอัปเดตทุกอินสแตนซ์:

@Override โมฆะสาธารณะ onUpdate (บริบทบริบท AppWidgetManager appWidgetManager, int appWidgetIds) {สำหรับ (int appWidgetId: appWidgetIds) {// อัปเดตอินสแตนซ์ทั้งหมดของเครื่องมือนี้ // updateAppWidget } super.onUpdate (บริบท appWidgetManager, appWidgetIds); }

โปรดทราบว่าเพื่อช่วยให้รหัสตรงไปตรงมาวิธีการ onUpdate () นี้ไม่ได้ทำการเปลี่ยนแปลงใด ๆ กับวิดเจ็ต

onEnabled: ทำการตั้งค่าเริ่มต้น

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 (); }

AppWidgetProvider ที่เสร็จสมบูรณ์

ไฟล์ 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 ซึ่งกำหนดคุณสมบัติที่สำคัญหลายประการรวมถึงขนาดขั้นต่ำของวิดเจ็ตและความถี่ที่ควรอัปเดต

ไฟล์ AppWidgetProviderInfo ถูกเก็บไว้ในโฟลเดอร์ res / xml ของโครงการของคุณ

หากโครงการของคุณไม่มีโฟลเดอร์นี้อยู่คุณจะต้องสร้างมันขึ้นมา:

  • คลิกควบคุมโฟลเดอร์ res ของโปรเจ็กต์ของคุณ
  • เลือกสร้างใหม่> ไดเรกทอรีทรัพยากร Android
  • ในหน้าต่างถัดไปให้เปิดดรอปดาวน์ประเภททรัพยากรแล้วเลือก xml
  • ชื่อไดเรกทอรีควรอัปเดตเป็น xml โดยอัตโนมัติ แต่หากไม่เป็นเช่นนั้นคุณจะต้องเปลี่ยนชื่อด้วยตนเอง
  • คลิกตกลง

จากนั้นสร้างไฟล์ collection_widget_info ซึ่งเราจะใช้เป็น AppWidgetProviderInfo ของเรา:

  • คลิกควบคุมโฟลเดอร์ xml ของโครงการของคุณ
  • เลือกใหม่> ไฟล์ทรัพยากร XML
  • ตั้งชื่อไฟล์นี้ collection_widget_info
  • คลิกตกลง

ในไฟล์ AppWidgetProviderInfo ของเราเราต้องกำหนดคุณสมบัติต่อไปนี้:

1. android: ดูตัวอย่างภาพ

นี่คือ drawable ที่แสดงวิดเจ็ตแอปพลิเคชันของคุณใน Widget Picker ของอุปกรณ์

หากคุณไม่ได้แสดงตัวอย่างภาพหน้าจอ 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 ของคุณและกำหนดค่าระยะขอบและช่องว่างภายในต่อไปนี้:

10dp 8dp

กำลังส่งข้อมูลไปยังวิดเจ็ต

ต่อไปเราต้องสร้างบริการวิดเจ็ตซึ่งจะรับผิดชอบในการส่งข้อมูลการเก็บรวบรวมของเราไปยังวิดเจ็ต

สร้างคลาส 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 อย่าลืมแบ่งปันผลงานของคุณในความคิดเห็นด้านล่าง!

Nintendo witch Online นั้นถูกกว่าเล็กน้อยที่ $ 20 ต่อปี แต่คุณยังต้องจ่ายเพิ่มเพื่อเล่นกับเพื่อน ๆ ทางออนไลน์ เป็นเพียงการปฏิบัติที่ได้มาตรฐานสำหรับเครื่องเล่นเกมและนักเล่นเกมส่วนใหญ่จ่ายเงินโดยไม่ต้อ...

หนึ่งในคันที่ Google tadia พยายามที่จะเกาก็คือความยืดหยุ่น อีกต่อไปจะเป็นวันที่ผู้คนต้องลงทุนทางการเงินในฮาร์ดแวร์เพื่อสัมผัสกับวิดีโอเกมใหม่ล่าสุดและยิ่งใหญ่ที่สุด อยู่มาวันหนึ่งเราจะเปลี่ยน PC-cruhi...

คำแนะนำของเรา