티스토리 뷰

프로그래밍/Android

앱 위젯 만들기

앙망 2011. 8. 16. 11:58

처음에 앱 위젯을 만들어야쥐~하고 생각했을 땐 쉽게 될 줄 알았다. 이미 작성해논 액비티비 화면을 그대로 불러다 쓰면 될 줄 알았다...그러나 이것은 나의 착각이었으니...

일단 앱 위젯 레이아웃 구성에서부터 막혀버렸다...알고보니 앱 위젯에 쓰일 수 있는 뷰는 한정되어 있었다. 내가 만들어놓은 커스텀 뷰나 리스트뷰같은근 쓰지 못한다.

작업순서

  • 앱 위젯 레이아웃 만들기
  • 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>
댓글