저번 글에서는 홈스크린 위젯의 기초에 대해 알아보았으니, 이번 글에서는 홈스크린 위젯에서 상호작용을 할 수 있도록 버튼을 추가해보겠습니다.
지난번에 작업한 예제를 바탕으로 예제를 만들어보겠습니다. 실습을 시작하기 전에 예제를 미리 준비해주세요.
[어플리케이션 정보]
액티비티
레이아웃
XML
액티비티
- SimpleActivity.java (SimpleActivity)
레이아웃
- simpleactivity.xml (SimpleActivity)
- simple_widget_layout.xml (위젯 레이아웃)
XML
- simplewidget.xml (위젯 프로바이더)
API Level
- 8 (Android 2.2)
이번 강좌에서는 위젯에 버튼을 추가하고, 버튼을 누르면 액티비티를 호출하도록 만들어보겠습니다. 먼저 위젯의 레이아웃을 다음과 같이 수정합니다. 버튼이 하나 추가되었습니다.
[simple_widget_layout.xml]
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="@drawable/widget_background_4_1" android:gravity="center" android:layout_height="wrap_content" android:layout_width="fill_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:textSize="20dp" android:id="@+id/simple_widget_layout_text" android:text="Hello, Widget!" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/simple_widget_layout_activity" android:layout_marginLeft="10dp" android:text="Activity" /> </LinearLayout>
다음, 위젯 소스코드를 다음과 같이 수정합니다.
[MySimpleWidget.java]
public class MySimpleWidget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){ final int N = appWidgetIds.length; for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; RemoteViews views = buildViews(context); appWidgetManager.updateAppWidget(appWidgetId, views); } } private PendingIntent buildActivityIntent(Context context){ Intent intent = new Intent(Intent.ACTION_VIEW) .setData(Uri.parse("http://google.com")); PendingIntent pi = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); return pi; } private RemoteViews buildViews(Context context){ RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.simple_widget_layout); views.setOnClickPendingIntent(R.id.simple_widget_layout_activity, buildActivityIntent(context)); return views; } }
버튼을 눌렀을 때 액티비티를 띄우기 위해 buildActivityIntent()에서 PendingIntent를 생성하고, setOnClickPendingIntent()를 통해 버튼을 클릭했을 때 수행할 PendingIntent를 지정합니다. 홈스크린 위젯에서 액티비티를 호출할 때는 액티비티 스택이 없는 상태이므로 Intent.FLAG_ACTIVITY_NEW_TASK 플래그를 지정하여 액티비티가 새로운 태스크에서 실행되도록 지정해야 합니다.
예제를 실행하고, 홈스크린에 위젯을 추가하면 다음과 같이 버튼이 위젯에 버튼이 추가된 모습을 확인하실 수 있습니다.
위젯의 버튼을 누르면 다음과 같이 브라우저가 실행되면서 지정한 페이지가 표시됩니다.
'유저 인터페이스 > 홈스크린 위젯' 카테고리의 다른 글
홈스크린 위젯을 만들어보자! - 간단한 위젯 작성하기 (15) | 2010.10.24 |
---|