2012/03/06

안드로이드 Widget 만들기 - HelloWidget

간단한 위젯을 만들어 보았다.



책이고 인터넷이고 찾아보았는데 쉽게 설명해 놓은 것이 없어 만드는데 고생을 좀 했다. 설명이 부족하다기보다는 기초가 덜 되어 있어 그런 것 같다.



나중에 또 잊어버릴까봐 나름 정리해 보았다.



간단하게 단계별로 정리하면 다음과 같다.


  1. Widget용 layout xml 작성 

  2. Provider용 xml 작성 

  3. Manifest에 Receiver 추가 

  4. Receiver에 Class 생성


우선 기본 Activity를 생성하지 않는 프로젝트를 만든다.



만들어진 프로젝트에 Widget Layout을 위한 XML 파일을 추가한다.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/textHello"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello Widget!!" android:gravity="center"/>

</LinearLayout>


Provider용 xml 파일을 생성한다.



생성한 Provider용 XML에 Widget의 크기와 layout용 xml 파일을 설정한다. 



Project Manifest 에 Receiver 추가한다. 추가하고 Widget List에 표시될 이름을 Label에 입력한다.


<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:updatePeriodMillis="0"
android:minWidth="146dp"
android:minHeight="72dp"
android:initialLayout="@layout/hellowidget">

</appwidget-provider>


생성된 Receiver 에 Intent Filter를 추가한다.



추가된 Intent Filter 에 Action을 추가한다.



추가된 Action에 "android.appwidget.action.APPWIDGET_UPDATE" 를 입력한다.



Receiver 에 Meta Data를 추가한다. 



추가된 Meta Data에 이름으로 android.appwidget.provider를 Resoruce에 이미 생성한 provider를 위한 xml 파을을 설정한다.


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="neosoft.neodreamer.widget"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:label="Hello Widget" android:name="HelloWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data
android:resource="@xml/hellowidgetprov"
android:name="android.appwidget.provider"/>
</receiver>
</application>

</manifest>


다시 Receiver를 선택하고 Attributes에서 Name* 을 클릭하여 클래스를 생성한다.



클래스 생성시 Superclass에 android.appwidget.AppWidgetProvider를 지정하고 클래스를 생성한다.



생성한 클래스 소스에서 오른쪽 팝업메뉴의 Source 에서 "Override/Implement Methods..."를 선택한다.



메소드 중에서 "onUpdate"를 Override 한다.



생성을 하고 실행을 하면 Emulator는 아무런 반응이 없다. Eclipse의 로그에 실행할 Activity가 없어 Install만 되었다는 메세지가 출력된다.



Emulator의 Home Screen에서 메뉴 버튼을 눌러 Widget를 추가한다.







위젯을 등록하면 아주 간단한 Widget이 Home Screen에 보여진다.



기술적인 내용이 없이 이미지만으로 위젯을 생성하는 것을 설명하였다. 보다 자세한 설명을 위해서는 좀 더 공부를

Original Post : http://neodreamer-dev.tistory.com/648