본문 바로가기

유저 인터페이스/홈스크린 위젯

홈스크린 위젯을 만들어보자! - 버튼 추가하기

저번 글에서는 홈스크린 위젯의 기초에 대해 알아보았으니, 이번 글에서는 홈스크린 위젯에서 상호작용을 할 수 있도록 버튼을 추가해보겠습니다.

지난번에 작업한 예제를 바탕으로 예제를 만들어보겠습니다. 실습을 시작하기 전에 예제를 미리 준비해주세요.

[어플리케이션 정보]

액티비티
  • 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 플래그를 지정하여 액티비티가 새로운 태스크에서 실행되도록 지정해야 합니다.

예제를 실행하고, 홈스크린에 위젯을 추가하면 다음과 같이 버튼이 위젯에 버튼이 추가된 모습을 확인하실 수 있습니다.



위젯의 버튼을 누르면 다음과 같이 브라우저가 실행되면서 지정한 페이지가 표시됩니다.