앱용 Android 위젯 만들기

작가: Lewis Jackson
창조 날짜: 13 할 수있다 2021
업데이트 날짜: 1 칠월 2024
Anonim
[안드로이드 앱 만들기] 2. 위젯 배치하기
동영상: [안드로이드 앱 만들기] 2. 위젯 배치하기

콘텐츠


OS 초기부터 Android 용 위젯을 사용하면 홈 화면에서 편안하게 원하는 앱을 이용할 수있었습니다. 그렇다면 Android 위젯을 어떻게 만드나요?

개발자에게 위젯은 애플리케이션을 사용자의 홈 화면에 귀중하게 제공합니다. 앱 서랍에 눈이 보이지 않게하는 대신 사용자에게 앱에 대한 알림이 표시됩니다. 매번 홈 화면을 보면서 앱의 가장 흥미롭고 유용한 콘텐츠를 미리 볼 수 있습니다.

위젯은 사용자의 홈 화면에서 애플리케이션에 소중한 존재를 제공합니다.

이 기사에서는 Android 위젯을 작성하여 사용자가 앱에 참여하도록 독려하면서 더 나은 사용자 경험을 제공하는 방법을 설명합니다! 이 기사가 끝날 때까지 사용자의 홈 화면에 전체 데이터 세트를 표시하는 스크롤 가능한 컬렉션 위젯을 만들었습니다.

사용자가 원하는 종류의 위젯을 제공 할 수 있도록 필요 또한 메인 스크린에 배치하기 위해 구성 활동을 작성하여 사용자가 위젯의 컨텐츠, 모양 및 기능을 사용자 정의 할 수있게합니다. 마지막으로, 위젯이 제공하는 최고를 보여주는 위젯 미리보기 이미지를 만들어 사람들이 위젯을 사용하도록 장려 할 수있는 방법을 보여 드리겠습니다.

또한 읽어보십시오 : 접이식 장치를위한 개발 : 알아야 할 사항

Android 용 위젯은 무엇입니까?

애플리케이션 위젯은 사용자의 홈 화면에있는 경량의 소형 애플리케이션입니다.

Android 용 위젯은 다양한 컨텐츠를 제공 할 수 있지만 일반적으로 다음 범주 중 하나에 속합니다.

  • 정보 위젯. 오늘 일기 예보 또는 날짜 및 시간과 같은 일부 정보를 표시하는 스크롤 할 수없는 위젯입니다.
  • 수집 위젯. 이것은 ListView, GridView, StackView 또는 AdapterViewFlipper로 형식화 된 관련 데이터 세트를 표시하는 스크롤 가능한 위젯입니다. 컬렉션 위젯은 일반적으로 데이터베이스 또는 배열과 같은 데이터 소스에 의해 지원됩니다.
  • 컨트롤 위젯. 이 위젯은 사용자가 응용 프로그램과 상호 작용할 수있는 원격 제어 역할을합니다. 없이 포 그라운드로 가져와야합니다. 팟 캐스트 또는 음악과 같은 미디어를 재생하는 앱에는 종종 사용자가 홈 화면에서 직접 재생, 일시 정지 및 건너 뛰기 동작을 트리거 할 수있는 제어 위젯이 있습니다.
  • 하이브리드 위젯. 때로는 여러 카테고리의 요소를 결합하여 더 나은 사용자 경험을 제공 할 수 있습니다. 예를 들어 음악 응용 프로그램 용 제어 위젯을 개발하는 경우 재생, 일시 중지 및 건너 뛰기 제어를 제공 할 수 있지만 노래 제목 및 아티스트와 같은 일부 정보를 표시하도록 결정할 수도 있습니다. 당신이 혼합하고 일치하기로 결정했다면, 멀리하지 마십시오! 위젯은 소량의 관련 정보 또는 자주 사용되는 기능에 쉽게 액세스 할 수있는 최상의 사용자 환경을 제공하는 경향이 있습니다. 하이브리드 위젯을 경량으로 유지하려면 위젯의 기본 카테고리를 식별하고 해당 카테고리에 따라 개발하는 것이 좋습니다. 그때 위젯의 보조 카테고리에서 몇 가지 요소를 추가합니다.

내 프로젝트에 실제로 응용 프로그램 위젯이 필요합니까?

Android 프로젝트에 애플리케이션 위젯을 추가해야하는 몇 가지 이유가 있습니다.


Android 용 위젯은 사용자 경험을 향상시킬 수 있습니다

일반적으로 작업을 완료하는 데 필요한 탐색 단계가 적을수록 사용자 경험이 향상됩니다.

응용 프로그램 위젯을 제공하면 가장 일반적으로 사용되는 앱 흐름에서 여러 탐색 단계를 제거 할 수 있습니다. 가장 좋은 시나리오에서는 사용자가 홈 화면을보고 필요한 정보를 얻거나 제어 위젯에서 버튼을 누르기 만하면 원하는 작업을 수행 할 수 있습니다.

응용 프로그램 바로 가기보다 강력

앱 위젯은 종종 애플리케이션 바로 가기와 유사한 관련 애플리케이션에서 최상위 레벨을 실행하여 onClick 이벤트에 응답합니다. 그러나 위젯은 애플리케이션의 특정 활동에 직접 액세스 할 수도 있습니다 (예 : 위젯의 새로운 수신 알림을 누르면 새 애플리케이션이 이미 열린 상태에서 관련 앱이 실행될 수 있음).

위젯 레이아웃에 여러 개의 링크를 포함시켜 가장 자주 사용되는 흐름에서 더 많은 탐색 단계를 제거하여 모든 앱의 가장 중요한 활동에 한 번의 탭 액세스를 제공 할 수 있습니다.

위젯 레이아웃에 여러 개의 링크를 포함시켜 모든 앱의 가장 중요한 활동에 한 번의 클릭으로 액세스 할 수 있습니다.

위젯은 onClick 이벤트에만 응답하므로 사용자가 홈 화면에서 스 와이프하는 동안 실수로 위젯과 상호 작용할 수 없습니다. 단,이 시나리오에서 위젯은 세로 스 와이프 동작에 응답하므로 사용자가 위젯을 홈 화면의 삭제 작업으로 드래그하여 삭제하려고하는 경우는 예외입니다.

이 상호 작용은 Android 시스템에서 관리되므로 위젯에서 수직 스 와이프 지원을 수동으로 구현하는 것에 대해 걱정할 필요가 없습니다.

장기적인 참여를 유도하는 Android 위젯 만들기

사람들이 앱을 다운로드하도록 설득하는 것은 성공적인 Android 애플리케이션을 만드는 첫 번째 단계 일뿐입니다. 자신의 Android 스마트 폰 또는 태블릿을 잡고 앱 서랍을 스 와이프하면 며칠, 몇 주 또는 몇 달 동안 사용하지 않은 여러 앱을 발견 할 수 있습니다.


또한 읽어보십시오 :Android SDK 용 Facebook 시작하기

앱이 사용자 기기에 성공적으로 설치되면 앱을 계속 사용하고 앱을 즐기기 위해 열심히 노력해야합니다. 앱에 홈 화면을 표시하면 애플리케이션이 존재한다는 사실을 지속적으로 상기시켜주기 때문에 장기적인 참여를 유도 할 수있는 강력한 도구가 될 수 있습니다.

잘 설계된 위젯은 앱에 대한 지속적인 광고 역할을 할 수도 있습니다. 사용자가 홈 화면을 볼 때마다 위젯은 앱에서 가장 흥미롭고 유용한 모든 콘텐츠를 제시하여 앱에 다시 참여하도록 적극적으로 권장 할 수 있습니다.

컬렉션 앱 위젯 만들기

이 자습서에서는 배열을 스크롤 가능한 ListView로 표시하는 컬렉션 위젯을 작성합니다.

앱 위젯 수명주기를 추적 할 수 있도록이 위젯은 서로 다른 수명주기 상태를 이동할 때 다양한 토스트를 트리거합니다. 이 자습서가 끝날 무렵, Android 위젯 선택기에 표시되는 맞춤 미리보기 이미지와 사용자가 위젯을 메인 스크린에 배치하기 전에 위젯을 사용자 정의 할 수있는 구성 활동으로 위젯을 향상시킬 것입니다.

원하는 설정으로 새 Android 프로젝트를 만들고 시작하겠습니다.

위젯 레이아웃 구축

시작하려면 위젯의 UI (사용자 인터페이스)를 정의 해 보겠습니다.

응용 프로그램 위젯이 프로세스에 표시됩니다 외부 RemoteView에서 지원하는 레이아웃과보기 만 사용할 수 있습니다.

레이아웃을 만들 때 다음과 같이 제한됩니다.

  • AnalogClock
  • 단추
  • 메트로놈
  • 프레임 레이아웃
  • 그리드 레이아웃
  • 이미지 버튼
  • ImageView
  • 선형 레이아웃
  • 진행 표시 줄
  • 상대 레이아웃
  • TextView
  • 뷰 스텁
  • AdapterViewFlipper
  • GridView
  • 목록보기
  • StackView
  • 뷰 플리퍼

위 클래스와 뷰의 서브 클래스는 아니 지원됩니다.

list_widget.xml이라는 새 레이아웃 리소스 파일을 만듭니다. ListView를 사용하여 데이터를 표시하므로이 레이아웃은 주로 요소:

컬렉션 위젯 채우기

다음으로 ListView 용 데이터 공급자를 만들어야합니다. DataProvider.java라는 새 Java 클래스를 작성하고 다음을 추가하십시오.

import android.content.Context; android.content.Intent 가져 오기; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import java.util.ArrayList; import java.util.List; 정적 android.R.id.text1 가져 오기; 정적 android.R.layout.simple_list_item_1 가져 오기; 공용 클래스 DataProvider는 RemoteViewsService.RemoteViewsFactory를 구현합니다. {List myListView = 새 ArrayList <> (); 문맥 mContext = null; public DataProvider (컨텍스트 컨텍스트, 의도 의도) {mContext = context; } @Override public void onCreate () {initData (); } @Override public void onDataSetChanged () {initData (); } @Override public void onDestroy () {} @Override public int getCount () {return myListView.size (); } @ 공개 public View 재정의 getViewAt (int position) {RemoteViews view = new RemoteViews (mContext.getPackageName (), simple_list_item_1); view.setTextViewText (text1, myListView.get (position)); 리턴 뷰; } @Override public RemoteViews getLoadingView () {return null; } @Override public int getViewTypeCount () {return 1; } @ 공개 long 재정의 getgetId (int position) {반환 위치; } @Public public boolean hasStableIds () 재정의 {return true; } private void initData () {myListView.clear (); for (int i = 1; i <= 15; i ++) {myListView.add ( "ListView item"+ i); }}}

AppWidgetProvider : 위젯 구성

Android 위젯을 작성하려면 여러 파일을 작성해야합니다.

첫 번째 위젯 별 파일은 AppWidgetProvider이며, BroadcastReceiver는 위젯을 처음 만들 때 호출되는 방법 및 해당 위젯이 결국 삭제 될 때 호출되는 방법과 같은 다양한 위젯 수명주기 방법을 정의하는 BroadcastReceiver입니다.

CollectionWidget이라는 새 Java 클래스 (파일> 새로 작성> Java 클래스)를 작성하십시오.

시작하려면 모든 위젯 제공자 파일이 AppWidgetProvider 클래스에서 확장되어야합니다. 그런 다음 list_widget.xml 레이아웃 리소스 파일을 RemoteViews 객체로로드하고 업데이트 된 RemoteViews 객체에 대해 AppWidgetManager에 알려야합니다.

공용 클래스 CollectionWidget은 AppWidgetProvider를 확장합니다. {static void updateAppWidget (컨텍스트 컨텍스트, AppWidgetManager appWidgetManager, int appWidgetId) {// RemoteViews 객체 // RemoteViews보기 인스턴스 = new RemoteViews (context.getPackageName (), R.layout.list_widget); setRemoteAdapter (컨텍스트, 뷰); // AppWidgetManager가 응용 프로그램 위젯을 업데이트하도록 요청합니다 .// appWidgetManager.updateAppWidget (appWidgetId, views); }

어댑터 작성

ListView에 데이터를 표시하기 때문에 AppWidgetProvider에서 setRemoteAdapter () 메소드를 정의해야합니다. setRemoteAdapter ()는 AbsListView.setRemoteViewsAdapter ()를 호출하는 것과 동일하지만 애플리케이션 위젯에서 사용하도록 설계되었습니다.

이 방법에서는 AdapterView의 ID (R.id.widget_list)와 RemoteViewsAdapter에 데이터를 제공 할 서비스의 의도를 정의해야합니다.이 WidgetService 클래스를 곧 만들 것입니다.

private static void setRemoteAdapter (컨텍스트 컨텍스트, @NonNull 최종 RemoteViews보기) {views.setRemoteAdapter (R.id.widget_list, 새로운 의도 (context, WidgetService.class)); }}

위젯 라이프 사이클 메소드 정의

AppWidgetProvider에서 다음 위젯 라이프 사이클 메소드도 정의해야합니다.

onUpdate로 새 컨텐츠 검색

onUpdate () 위젯 라이프 사이클 메소드는 위젯의보기를 새로운 정보로 업데이트합니다.

이 메소드는 매번 호출됩니다.

  • 사용자는 onUpdate () 메소드를 수동으로 트리거하는 조치를 수행합니다.
  • 응용 프로그램의 지정된 업데이트 간격이 경과되었습니다.
  • 사용자는이 위젯의 ​​새 인스턴스를 홈 화면에 배치합니다.
  • ACTION_APPWIDGET_RESTORED 브로드 캐스트 인 텐트가 AppWidgetProvider로 전송됩니다. 위젯이 백업에서 복원 된 경우이 브로드 캐스트 의도가 트리거됩니다.

여기에서 위젯이 사용해야하는 이벤트 핸들러를 등록 할 수 있습니다.

Android 위젯을 업데이트 할 때 사용자는 동일한 위젯의 여러 인스턴스를 작성할 수 있다는 점을 기억해야합니다. 예를 들어, 위젯을 사용자 정의 할 수 있고 사용자가 다른 정보를 표시하거나 고유 한 기능에 대한 액세스를 제공하는 여러 "버전"을 작성하기로 결정했습니다.

onUpdate ()를 호출 할 때이 위젯의 ​​모든 인스턴스를 업데이트할지 아니면 특정 인스턴스 만 업데이트 할지를 지정해야합니다. 모든 인스턴스를 업데이트하려면 장치의 모든 인스턴스를 식별하는 ID 배열 인 appWidgetIds를 사용할 수 있습니다.

다음 스 니펫에서는 모든 인스턴스를 업데이트합니다.

@Override public void onUpdate (컨텍스트 컨텍스트, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId : appWidgetIds) {//이 위젯의 ​​모든 인스턴스 업데이트 // updateAppWidget (context, appWidgetManager, appWidgetId); } super.onUpdate (컨텍스트, appWidgetManager, appWidgetIds); }

코드를 간단하게 유지하기 위해이 onUpdate () 메소드는 현재 위젯을 변경하지 않습니다.

onEnabled : 초기 설정 수행

onEnabled () 라이프 사이클 메소드는 ACTION_APPWIDGET_ENABLED에 대한 응답으로 호출되며, 위젯의 인스턴스가 홈 화면에 추가 될 때 전송됩니다. 먼저 시각. 사용자가 위젯의 두 인스턴스를 작성하면 첫 번째 인스턴스에 대해 onEnabled ()가 호출되지만 아니 두 번째.

onEnabled () 라이프 사이클 메소드는 위젯 정보를 제공 할 데이터베이스 작성과 같이 위젯의 ​​모든 인스턴스에 필요한 설정을 수행해야하는 곳입니다.

토스트를 표시 할 예정이므로이 수명주기 방법이 언제 호출되는지 정확히 알 수 있습니다.

@Override public void onEnabled (Context context) {Toast.makeText (context, "onEnabled called", Toast.LENGTH_LONG) .show (); }

사용자가 위젯의 모든 인스턴스를 삭제 한 다음 새 인스턴스를 작성하면 첫 번째 인스턴스로 분류되며 onEnabled () 라이프 사이클 메소드가 다시 한 번 호출됩니다.

onDisabled로 정리

onDisabled () 메소드는 ACTION_APPWIDGET_DISABLED에 대한 응답으로 호출되며, 사용자가 시스템을 삭제할 때 트리거됩니다. 마지막 위젯 인스턴스.

이 위젯 라이프 사이클 메소드는 onEnabled () 메소드에서 작성한 모든 자원을 정리해야합니다 (예 : onEnabled ()에서 작성한 데이터베이스 삭제).

코드를 간단하게 유지하기 위해이 메소드가 트리거 될 때마다 토스트를 표시합니다.

@void public void onDisabled (Context context) {Toast.makeText (context, "onDisabled called", Toast.LENGTH_LONG) .show (); }

완성 된 AppWidgetProvider

CollectionWidget 파일은 이제 다음과 같아야합니다.

import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import androidx.annotation.NonNull; android.content.Intent 가져 오기; import android.widget.RemoteViews; android.widget.Toast 가져 오기; // AppWidgetProvider 클래스에서 확장 // public class CollectionWidget은 AppWidgetProvider를 확장합니다 {static void updateAppWidget (컨텍스트 컨텍스트, AppWidgetManager appWidgetManager, int appWidgetId) {// 레이아웃 리소스 파일을 RemoteViews 객체로로드 // RemoteViews 뷰 = 새로운 RemoteViews (컨텍스트) getPackageName (), R.layout.list_widget); setRemoteAdapter (컨텍스트, 뷰); // RemoteViews 객체에 대해 AppWidgetManager에 알립니다 .// appWidgetManager.updateAppWidget (appWidgetId, views); } @void public void onUpdate (컨텍스트 컨텍스트, AppWidgetManager appWidgetManager, int appWidgetIds) {for (int appWidgetId : appWidgetIds) {updateAppWidget (context, appWidgetManager, appWidgetId); } super.onUpdate (컨텍스트, appWidgetManager, appWidgetIds); } @void public void onEnabled (Context context) {Toast.makeText (context, "onEnabled called", Toast.LENGTH_LONG) .show (); } @void public void 재정의 onDisabled (Context context) {Toast.makeText (context, "onDisabled called", Toast.LENGTH_LONG) .show (); } private static void setRemoteAdapter (컨텍스트 컨텍스트, @NonNull 최종 RemoteViews보기) {views.setRemoteAdapter (R.id.widget_list, 새로운 의도 (context, WidgetService.class)); }}

AppWidgetProviderInfo 파일

응용 프로그램 위젯에는 위젯의 최소 크기 및 업데이트 빈도를 포함하여 몇 가지 중요한 속성을 정의하는 AppWidgetProviderInfo 파일도 필요합니다.

AppWidgetProviderInfo 파일은 프로젝트의 res / xml 폴더에 저장됩니다.

프로젝트에이 폴더가 없으면 다음을 만들어야합니다.

  • 프로젝트의 res 폴더를 Control- 클릭하십시오.
  • 새로 작성> Android 자원 디렉토리를 선택하십시오.
  • 다음 창에서 자원 유형 드롭 다운을 열고 xml을 선택하십시오.
  • 디렉토리 이름은 자동으로 xml로 업데이트되지만 그렇지 않은 경우 수동으로 변경해야합니다.
  • 확인을 클릭하십시오.

다음으로 AppWidgetProviderInfo로 사용할 collection_widget_info 파일을 만듭니다.

  • 프로젝트의 xml 폴더를 Control- 클릭하십시오.
  • 새로 작성> XML 자원 파일을 선택하십시오.
  • 이 파일의 이름을 collection_widget_info로 지정하십시오.
  • 확인을 클릭하십시오.

AppWidgetProviderInfo 파일에서 다음 속성을 정의해야합니다.

1. android : 미리보기 이미지

기기의 위젯 피커에서 애플리케이션 위젯을 나타내는 드로어 블입니다.

previewImage를 제공하지 않으면 Android가 대신 애플리케이션 아이콘을 사용합니다. 사용자가 위젯 피커에서 위젯을 선택하도록하려면 사용자의 홈 화면에서 위젯이 올바르게 구성되면 위젯이 어떻게 보이는지 보여주는 드로어 블을 제공해야합니다.

미리보기 이미지를 만드는 가장 쉬운 방법은 Android 에뮬레이터에 포함 된 위젯 미리보기 응용 프로그램을 사용하는 것입니다. 이 앱을 사용하면 위젯을 구성한 다음 이미지를 생성하여 Android 프로젝트에서 사용할 수 있습니다.

위젯 작성을 마치면이 이미지를 만들 것이므로 이제 자동 생성 된 밉맵 / ic_launcher 리소스를 임시 미리보기 이미지로 사용하겠습니다.

2. 안드로이드 : 위젯 카테고리

응용 프로그램 위젯은 일반적으로 재고 Android 홈 화면 인 App Widget Host 안에 있어야하지만 Evie Launcher 또는 Nova Launcher와 같은 타사 런처 일 수도 있습니다.

API 레벨 17과 20 사이에서 애플리케이션 위젯을 홈 화면에 배치 할 수있었습니다. 또는 잠금 화면이지만 잠금 화면 지원은 API 레벨 21에서 더 이상 사용되지 않습니다.

android : widgetCategory 속성을 사용하여 앱 위젯을 홈 화면, 잠금 화면 (Android는 "keyguard"라고 함) 또는 둘 다에 배치 할 수 있는지 여부를 지정할 수 있습니다. 최신 버전의 Android에서는 잠금 화면에 위젯을 배치 할 수 없으므로 홈 스크린 만 타겟팅합니다.

사용자의 개인 정보를 보호하기 위해 위젯은 잠금 화면에 배치 될 때 민감한 정보 나 개인 정보를 표시하지 않아야합니다.

사용자에게 위젯을 잠금 화면에 놓을 수있는 옵션을 제공하면 사용자의 기기를 보는 사람은 누구나 위젯과 모든 내용을 볼 수 있습니다. 사용자의 개인 정보를 보호하기 위해 위젯은 잠금 화면에 배치 될 때 민감한 정보 나 개인 정보를 표시하지 않아야합니다. 위젯에 개인 데이터가 포함 된 경우 별도의 홈 화면 및 잠금 화면 레이아웃을 제공하는 것이 좋습니다.

3. android : 초기 레이아웃

이 파일은 위젯이 홈 스크린에 배치 될 때 위젯에서 사용해야하는 레이아웃 자원 파일이며 프로젝트의 경우 list_widget.xml입니다.

4. android : resizeMode =”수평 | 수직”

android : resizeMode 속성을 사용하면 위젯을 가로, 세로 또는 두 축을 따라 크기를 조정할 수 있는지 여부를 지정할 수 있습니다.

다양한 화면에서 위젯이 올바르게 표시되고 작동하도록하려면 위젯 크기를 가로로 조정하는 것이 좋습니다. 특별한 이유가 없다면 수직으로 말입니다.

5. 안드로이드 : minHeight 및 안드로이드 : minWidth

위젯의 크기를 조정할 수 있으면 사용자가 위젯을 사용할 수없는 지점으로 축소하지 않도록해야합니다. minHeight 및 minWidth 속성을 사용하여 사용자가 크기를 조정할 때 앱이 축소되는 최소 크기를 정의 할 수 있습니다.

이 값은 위젯의 초기 크기도 나타내므로 위젯의 크기를 조정할 수없는 경우 minHeight 및 minWidth가 위젯의 영구 크기를 정의합니다.

6. android : updatePeriodMillis

AppWidgetProviderInfo는 위젯이 새 정보를 요청하는 빈도를 지정하는 위치이기도합니다.

지원되는 가장 작은 업데이트 간격은 1800000 밀리 초 (30 분)마다 한 번씩입니다. 더 짧은 업데이트 간격을 선언하더라도 위젯은 30 분마다 한 번 씩만 업데이트됩니다.

최신 정보를 최대한 빨리 표시하고 싶을 때 시스템 의지 새로운 정보를 검색하기 위해 수면 장치를 깨 웁니다. 빈번한 업데이트는 특히 장치가 밤새와 같이 상당한 시간 동안 유휴 상태 인 장치의 배터리를 통해 구울 수 있습니다. 최상의 사용자 경험을 제공한다는 것은 배터리 소비 제한과 합리적인 시간 내에 새로운 정보를 제공하는 것 사이의 균형을 유지하는 것을 의미합니다.

또한 위젯이 표시 할 컨텐츠의 종류를 고려해야합니다.

또한 Android 용 위젯이 표시 할 컨텐츠의 종류도 고려해야합니다. 예를 들어 날씨 위젯은 하루에 한 번 업데이트 된 예측 만 검색하면되고 뉴스 속보를 표시하는 앱은 더 자주 업데이트해야합니다.

이 완벽한 균형을 찾으려면 다양한 업데이트 빈도에서 위젯을 테스트하고 배터리 수명 및 위젯 컨텐츠의 적시성에 미치는 영향을 측정해야 할 수 있습니다. 기꺼이 테스터 그룹을 보유한 경우 A / B 테스트를 설정하여 일부 업데이트 빈도가 다른 업데이트 빈도보다 긍정적으로 수신되는지 확인할 수도 있습니다.

또한 읽습니다. 알아야 할 모든 AndroidManifest.xml

마지막으로 완벽한 업데이트 간격을 확인한 후에는 앱을 개발하고 테스트 할 때 더 짧은 간격을 사용하는 것이 좋습니다. 예를 들어 앱의 onUpdate () 메서드가 올바르게 트리거되는지 테스트 할 때 가능한 가장 짧은 업데이트 빈도 (android : updatePeriodMillis =”1800000 ″)를 사용한 다음 앱을 일반인에게 공개하기 전에이 값을 변경할 수 있습니다.

완성 된 AppWidgetProviderInfo

완성 된 collection_widget_info.xml 파일은 다음과 같아야합니다.

사용자의 홈 화면을 어지럽히 지 마십시오!

홈 화면이 복잡하게 보이지 않도록 위젯에 여백과 여백을 추가합니다. 프로젝트에 dimens.xml 파일이 포함되어 있지 않은 경우 파일을 만들어야합니다.

  • 프로젝트의 값 폴더를 Control- 클릭하십시오.
  • 새로 작성> 값 자원 파일을 선택하십시오.
  • 이 파일 이름을 dimens로 지정하십시오.
  • 확인을 클릭하십시오.

dimens.xml 파일을 열고 다음 여백 및 패딩 값을 정의하십시오.

10dp 8dp

위젯으로 데이터 전송

다음으로, 위젯에 콜렉션 데이터를 전송하는 위젯 서비스를 작성해야합니다.

WidgetService라는 새 Java 클래스 (New> Java Class)를 작성하고 다음을 추가하십시오.

android.content.Intent 가져 오기; import android.widget.RemoteViewsService; 공용 클래스 WidgetService 확장 RemoteViewsService {@Override public RemoteViewsFactory onGetViewFactory (의도 의도) {return new DataProvider (this, intent); }}

매니페스트에 위젯 등록

이제 프로젝트 매니페스트를 일부 변경해야합니다.

시작하려면 매니페스트를 열고 위젯을 BroadcastReceiver로 등록하십시오. 또한 android.appwidget.action.APPWIDGET_UPDATE 액션에 인 텐트 필터를 추가해야합니다.

다음으로 앱 위젯 공급자를 지정해야합니다.

마지막으로 위젯으로 데이터를 전송할 서비스를 선언해야합니다.이 경우 위젯은 WidgetService 클래스입니다. 이 서비스에는 android.permission.BIND_REMOTEVIEWS 권한이 필요합니다.

위젯을 테스트 해보십시오

이 자습서를 따라했다면 이제 사용자의 홈 화면에 일련의 데이터를 표시하는 완벽한 컬렉션 위젯이 생깁니다.

실제 Android 프로젝트 인 경우 일반적으로 라이프 사이클 메소드, 특히 onUpdate () 메소드를 확장하지만 Android 디바이스에 설치하고 테스트 할 수있는 위젯을 작성하기 만하면됩니다.

  • 호환되는 Android 스마트 폰, 태블릿 또는 AVD (Android Virtual Device)에이 프로젝트를 설치하십시오.
  • 홈 화면의 빈 섹션을 길게 누르고 프롬프트가 표시되면 위젯을 선택하십시오. 위젯 피커가 시작됩니다.
  • 방금 만든 응용 프로그램 위젯을 찾을 때까지 위젯 선택기를 스 와이프합니다.
  • 이 위젯을 길게 눌러 홈 화면에 추가하십시오.
  • 이것이이 특정 위젯의 첫 번째 인스턴스이므로 onEnabled () 메소드가 실행되고 "onEnabled called"토스트가 표시됩니다.
  • 위젯 크기를 조정하십시오. 지원되는 최소 크기를 설정 한 경우이 값을 초과하여 위젯을 축소 할 수 없는지 확인하십시오.
  • 예상대로 ListView가 스크롤되는지 테스트하십시오.
  • 다음으로 위젯을 삭제하여 onDisabled () 메소드를 확인해야합니다. 위젯을 길게 누른 다음 홈 화면에서 제거를 선택하십시오. 이것이이 특정 위젯의 마지막 인스턴스이므로 onDisabled () 메소드가 실행되고 "onDisabled called"토스트가 표시됩니다.

이것이 작동하는 Android 애플리케이션 위젯을 제공하는 데 필요한 전부이지만 사용자 경험을 향상시킬 수있는 몇 가지 추가 사항이 있습니다. 다음 섹션에서는 위젯을 가장 잘 보여주는 미리보기 이미지를 만들어 위젯 피커에서이 위젯을 선택하도록 권장합니다. 또한 프로젝트에 구성 활동을 추가하여 완전히 사용자 정의 가능한 위젯을 작성하는 방법을 보여줄 것입니다.

Android 위젯 미리보기 이미지 작성

Android 기기를 가져 와서 위젯 선택 도구를 스 와이프하면 모든 위젯이 이미지로 표시되는 것을 볼 수 있습니다.이 위젯은 일반적으로 사용자의 홈 화면에서 구성된 위젯이 어떻게 표시되는지 보여줍니다.

사용자가 위젯을 선택하도록하려면 위젯이 제공해야하는 유용한 정보와 기능을 모두 강조하는 미리보기 이미지를 제공해야합니다.

Android 에뮬레이터에 포함 된 위젯 미리보기 응용 프로그램을 사용하여 미리보기 이미지를 빠르고 쉽게 작성할 수 있습니다.

위젯 미리보기는 최신 Android 시스템 이미지에 포함되어 있지 않으므로 Nougat (API 레벨 25) 이하를 사용하여 AVD를 만들어야합니다.

  • API 25 이하를 실행하는 AVD에 응용 프로그램을 설치하십시오.
  • AVD의 앱 서랍을 열고 위젯 미리보기 앱을 시작합니다.
  • 위젯 미리보기에는 현재이 AVD에 설치된 모든 응용 프로그램의 목록이 표시됩니다. 목록에서 응용 프로그램을 선택하십시오.

  • 위젯이 이제 빈 배경에 표시됩니다. 위젯이 제공하는 최고를 보여줄 때까지 위젯의 크기를 조정하고 조정하는 데 시간을 보내십시오.
  • 위젯의 모양과 내용에 만족하면 스냅 샷 찍기를 선택하십시오.

  • 스냅 샷을 검색하려면 Android Studio로 다시 전환하고 도구 모음에서보기> 도구 창> 장치 파일 탐색기를 선택하십시오. Android Studio의 기기 파일 탐색기가 시작됩니다.
  • 장치 파일 탐색기에서 sdcard / Download로 이동하십시오. 미리보기 이미지는 다음 형식으로 저장되어 있어야합니다. _ori_.png

  • 이 이미지를 Android Studio에서 드래그하여 데스크톱과 같이 쉽게 접근 할 수있는 곳에 놓으십시오.
  • 이 이미지 파일에 설명적인 이름을 지정하십시오.
  • 파일을 프로젝트의 드로어 블 폴더에 끌어다 놓습니다.
  • 이 프로젝트의 collection_widget_info.xml 인 AppWidgetProviderInfo를여십시오.
  • android : previewImage =”@ mipmap / ic_launcher”줄을 찾아서 미리보기 이미지를 참조하도록 업데이트하십시오.

위젯은 이제이 새로운 이미지 리소스를 미리보기 이미지로 사용합니다.

  • 실제 Android 장치 또는 AVD에 업데이트 된 프로젝트를 설치하십시오.
  • 홈 화면의 빈 공간을 길게 누르십시오.
  • 위젯을 누르면 위젯 선택기가 시작됩니다.
  • 위젯으로 스크롤하십시오. 이제 업데이트 된 미리보기 이미지를 사용해야합니다.

사용자 정의 가능한 위젯 : 구성 활동 추가

사용자가 위젯의 각 인스턴스를 홈 화면에 배치하면 구성 활동이 자동으로 시작됩니다.

프로젝트에 구성 활동을 추가해야하는 몇 가지 이유가 있습니다.

위젯은 개별 사용자에게 가장 중요한 정보 또는 기능에 대한 액세스를 제공 할 때 최상의 사용자 경험을 제공하는 경향이 있습니다.

첫째, 일부 위젯에는 초기 설정이 필요합니다. 예를 들어 교통 경고를 표시하는 위젯은 사용자의 집 주소, 근무처 및 통근 시간을 알아야 할 수 있습니다. 이 정보를 입력 할 수있는 방법이 없으면 위젯이 완전히 쓸모가 없을 수 있습니다!

또한 위젯은 개별 사용자에게 가장 중요한 정보 또는 기능에 대한 액세스를 제공 할 때 최상의 사용자 경험을 제공하는 경향이 있습니다. 프로젝트에 구성 활동을 추가하면 사용자가 자유롭게 선택하고 선택할 수 있습니다. 정확하게 위젯에 포함 된 내용

위젯의 배경이나 글꼴 변경과 같이 비교적 간단한 사용자 정의조차도 사용자 경험에 긍정적 인 영향을 줄 수 있습니다. 결국 다른 홈 화면과 시각적으로 충돌하는 위젯에 대해서는 아무도 감사하지 않습니다!

아무도 홈 화면의 나머지 부분과 시각적으로 충돌하는 위젯에 감사하지 않습니다!

또는 때로는 위젯에 포함 할 긴 컨텐츠 목록이있을 수 있으며 옵션 범위를 좁히려 고 애 쓰고 있습니다. 구성 활동은 모든 아이디어를 잘 활용할 수있는 방법이 될 수 있습니다. 창조 혼란스럽고 혼란스러운 위젯. 위젯을 설정하는 것이 번거로운 일이 아니므로 구성 활동을 제공하는 경우 세 가지 구성 옵션으로 제한하는 것이 좋습니다.

프로젝트에 구성 활동을 추가합시다!

먼저 구성 활동에 레이아웃이 필요하므로 config_activity.xml이라는 새 레이아웃 자원 파일을 작성하십시오.

이 레이아웃에 다음 버튼을 추가하겠습니다.

  • 구성 버튼. 실제 프로젝트에서이 버튼은 컨텐츠를 추가 또는 제거하거나 위젯이 업데이트되는 빈도를 변경하는 등의 방식으로 위젯을 수정합니다. 코드를 간단하게 유지하려면이 버튼을 클릭하면 구성 옵션 토스트가 표시됩니다.
  • 설정 버튼. 사용자가 위젯 구성 방법에 만족하면이 버튼을 누르면 새로 구성된 위젯이 홈 화면에 배치됩니다.

완성 된 config_activity.xml 파일은 다음과 같습니다.

구성 활동 작성

이제 구성 활동을 작성해야합니다.

시작하려면 ConfigActivity라는 새 Java 클래스를 작성하십시오. 이 액티비티에서는 구성 액티비티를 시작한 의도에서 앱 위젯 ID를 검색합니다. 이 의도에 위젯 ID가 없으면 finish () 메소드를 호출해야합니다.

의도 의도 = getIntent (); 번들 엑스트라 = intent.getExtras (); if (extras! = null) {appWidgetId = extras.getInt (AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {finish (); }

다음으로, 반품 의도를 작성하고 원래 appWidgetId를 전달하고 구성 활동의 결과를 설정해야합니다.

의도 결과 값 = 새로운 의도 (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); 끝(); }}}

구성 활동을 제공하면 구성 활동이 시작될 때 ACTION_APPWIDGET_UPDATE 브로드 캐스트가 자동으로 전송되지 않습니다. 즉 onUpdate () 메소드 습관 사용자가 위젯 인스턴스를 만들 때 호출됩니다.

최신 정보 및 컨텐츠로 위젯을 작성하려면 구성 활동 곰팡내 나게 하다 첫 번째 onUpdate () 요청을 트리거합니다.

완성 된 ConfigActivity는 다음과 같습니다.

import android.app.Activity; import android.appwidget.AppWidgetManager; android.os.Bundle 가져 오기; import android.widget.Button; android.content.Intent 가져 오기; import android.view.View; import android.view.View.OnClickListener; android.widget.Toast 가져 오기; 공용 클래스 ConfigActivity가 활동을 확장 함 {@Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.config_activity); setResult (RESULT_CANCELED); 버튼 setupWidget = (버튼) findViewById (R.id.setupWidget); setupWidget.setOnClickListener (new OnClickListener () {@ public void onClick (View v) 재정의 {handleSetupWidget ();}}); 버튼 configButton = (버튼) findViewById (R.id.configButton); configButton.setOnClickListener (new OnClickListener () {@ public void onClick (View v) 재정의 {handleConfigWidget ();}}); } private void handleSetupWidget () {showAppWidget (); } private void handleConfigWidget () {Toast.makeText (ConfigActivity.this, "구성 옵션", Toast.LENGTH_LONG) .show (); } int appWidgetId; private void 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) {finish (); } // TO DO : 구성 수행 // Intent resultValue = new Intent (); resultValue.putExtra (AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult (RESULT_OK, resultValue); 끝(); }}}

구성 활동을 작성한 후에는 Manifest에서이 활동을 선언하고 APPWIDGET_CONFIGURE 조치를 승인하도록 지정해야합니다.

마지막으로, 구성 활동이 패키지 범위 외부에서 참조되므로 AppWidgetProviderInfo에서이 활동을 선언해야합니다.이 인스턴스에서는 collection_widget_info.xml 파일입니다.

android : configure = "com.jessicathornsby.collectionwidget.ConfigActivity">

프로젝트 테스트

이제 완성 된 프로젝트를 테스트해야합니다.

  • 실제 Android 장치 또는 AVD에 업데이트 된 프로젝트를 설치하십시오.
  • 최신 버전으로 작업하려면 위젯의 이전 인스턴스를 모두 삭제하십시오.
  • 홈 화면의 빈 공간을 길게 누르고 메시지가 표시되면 위젯을 선택하십시오.
  • 위젯 피커에서 위젯을 찾아 길게 눌러 선택합니다.
  • 위젯을 홈 화면에 놓습니다. 구성 활동이 자동으로 시작됩니다.
  • 구성 수행 버튼을 클릭하면 구성 옵션 토스트가 나타나서이 상호 작용이 성공적으로 등록되었음을 확인합니다.
  • 위젯 설정을 조정하여 이제 홈 화면에 배치 할 준비가되었다고 상상해보십시오. 위젯 생성 버튼을 탭하면이 위젯이 성공적으로 생성됩니다.

완성 된 컬렉션 위젯 프로젝트는 GitHub에서 다운로드 할 수 있습니다.

마무리

이 기사에서는 사용자의 홈 화면에 데이터 세트를 표시하는 스크롤 가능한 컬렉션 위젯을 작성했습니다.

이 프로젝트를 계속 사용하려면 onUpdate () 메소드에 고유 코드를 추가하여 AppWidgetProviderInfo 파일 (collection_widget_info)에 정의 된 간격으로 새 정보로 업데이트되는 위젯을 작성하십시오.

Android 위젯을 작성하는 경우 아래 의견에 작성 사항을 공유하십시오!

또 다른 주에 픽셀 4의 또 다른 긴 목록이 유출되었습니다. 이 시점에서 우리는 새로운 색 구성표, 동작 제스처 세부 정보, 카메라 기능, 게임 성능, 사진 및 비디오 샘플 등을 포함하여 Google의 곧 출시 될 주요 휴대 전화에 대한 모든 정보를 보았습니다. Pixel 4 소문 라운드 업에서 최신 누출을 파악하십시오....

이번 주에는 삼성의 64MP 카메라 센서를 최초로 탑재 한 장치 인 Realme XT를 처음으로 살펴 보았습니다. 기기를 실제로 사용하면서 Google Pixel과 같은 이미지를 제작했습니다. 센서가있는 다음 장치 인 Redmi Note 8 Pro가 비슷한 결과를 낼 수 있는지 곧 알아볼 것입니다....

오늘 튀어 나와