티스토리 뷰
처음에 앱 위젯을 만들어야쥐~하고 생각했을 땐 쉽게 될 줄 알았다. 이미 작성해논 액비티비 화면을 그대로 불러다 쓰면 될 줄 알았다...그러나 이것은 나의 착각이었으니...
일단 앱 위젯 레이아웃 구성에서부터 막혀버렸다...알고보니 앱 위젯에 쓰일 수 있는 뷰는 한정되어 있었다. 내가 만들어놓은 커스텀 뷰나 리스트뷰같은근 쓰지 못한다.
작업순서
- 앱 위젯 레이아웃 만들기
- AppWidgetProviderInfo Metadata 추가하기
- AppWidgetProvider 상속 클래스 구현하기
- 매니페스트 파일에 등록하기
작업 상세
앱 위젯 레이아웃 만들기
참고 : Creating the App Widget Layout홈 스크린에 표시될 앱 위젯의 레이아웃을 만든다.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="320dp" android:layout_height="400dp" android:id="@+id/h_calendar_layout" android:background="#55000000"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/hw_today" android:layout_height="40dp" android:layout_width="wrap_content" android:layout_marginRight="3dp" android:text="오늘의 일정" android:textSize="30dp" /> <ImageButton android:id="@+id/hw_btn_cal" android:layout_alignParentRight="true" android:layout_width="45dp" android:layout_height="35dp" android:src="@drawable/calendar_alt_fill_32x32" android:background="@android:color/transparent" /> <ImageButton android:id="@+id/hw_btn_add" android:layout_toLeftOf="@id/hw_btn_cal" android:layout_alignBottom="@id/hw_btn_cal" android:layout_width="45dp" android:layout_height="35dp" android:src="@drawable/plus_32x32" android:background="@android:color/transparent" /> <ImageButton android:id="@+id/hw_btn_update" android:layout_toLeftOf="@id/hw_btn_add" android:layout_alignBottom="@id/hw_btn_cal" android:layout_width="45dp" android:layout_height="35dp" android:src="@drawable/reload_24x28" android:background="@android:color/transparent" /> </RelativeLayout> <LinearLayout android:id="@+id/hw_list" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>
AppWidgetProviderInfo Metadata 추가하기
참고 : App Widgets : AppWidgetProviderInfo Metadata 추가하기res/xml/ 폴더아래에 저장한다.
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="294dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/h_calendar_4_4" > </appwidget-provider>
AppWidgetProvider 상속 클래스 구현하기
참고 : App Widgets : AppWidgetProvider 클래스 사용하기
AppWidgetProvider 클래스는 BroadcastReceiver 를 상속받아서 앱 위젯 브로드캐스트를 처리한다.
public class MyAppWidgetProvider extends AppWidgetProvider { public MyAppWidgetProvider() { // TODO Auto-generated constructor stub } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for(int cnt=0 ; cnt < appWidgetIds.length ; cnt++){ int appWidgetId = appWidgetIds[cnt]; // Intent intent = new Intent(context, WidgetTemplete.class); } super.onUpdate(context, appWidgetManager, appWidgetIds); } }
매니페스트 파일에 등록하기
application 안에 홈 위젯을 등록한다.
<!-- 홈 위젯 등록하기 --> <receiver android:name="com.angmang.prj01.appwidget.MyAppWidgetProvider"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> <action android:name="com.angmang.prj01.appwidget.MyAppWidgetProvider.Refresh"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/info_home_widget_4_4" /> </receiver>
댓글