'위젯'에 해당되는 글 1건

  1. 2013.07.16 스크린 위젯을 만들어보자! - 버튼 추가하기
android2013. 7. 16. 11:27


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


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

[어플리케이션 정보]

액티비티
  • SimpleActivity.java (SimpleActivity)

레이아웃
  • simpleactivity.xml (SimpleActivity)
  • simple_widget_layout.xml (위젯 레이아웃)

XML
  • simplewidget.xml (위젯 프로바이더)
API Level
  • 8 (Android 2.2)


이번 강좌에서는 위젯에 버튼을 추가하고, 버튼을 누르면 액티비티를 호출하도록 만들어보겠습니다. 먼저 위젯의 레이아웃을 다음과 같이 수정합니다. 버튼이 하나 추가되었습니다.

[simple_widget_layout.xml]
01.<?xml version="1.0" encoding="utf-8"?>
02.<LinearLayout
04.android:background="@drawable/widget_background_4_1"
05.android:gravity="center"
06.android:layout_height="wrap_content"
07.android:layout_width="fill_parent"
08.>
09.<TextView
10.android:layout_width="wrap_content"
11.android:layout_height="wrap_content"
12.android:textColor="#000000"
13.android:textSize="20dp"
14.android:id="@+id/simple_widget_layout_text"
15.android:text="Hello, Widget!" />
16. 
17.<Button
18.android:layout_width="wrap_content"
19.android:layout_height="wrap_content"
20.android:id="@+id/simple_widget_layout_activity"
21.android:layout_marginLeft="10dp"
22.android:text="Activity" />
23. 
24.</LinearLayout>

다음, 위젯 소스코드를 다음과 같이 수정합니다.

[MySimpleWidget.java]
01.public class MySimpleWidget extends AppWidgetProvider {
02. 
03.@Override
04.public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
05.final int N = appWidgetIds.length;
06. 
07.for (int i=0; i<N; i++) {
08.int appWidgetId = appWidgetIds[i];
09.RemoteViews views = buildViews(context);
10.appWidgetManager.updateAppWidget(appWidgetId, views);
11.}
12.}
13. 
14.private PendingIntent buildActivityIntent(Context context){
15.Intent intent = new Intent(Intent.ACTION_VIEW)
16..setData(Uri.parse("http://google.com"));
17.PendingIntent pi = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
18.return pi;
19.}
20. 
21.private RemoteViews buildViews(Context context){
22.RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.simple_widget_layout);
23.views.setOnClickPendingIntent(R.id.simple_widget_layout_activity, buildActivityIntent(context));
24.return views;
25.}
26.}

버튼을 눌렀을 때 액티비티를 띄우기 위해 buildActivityIntent()에서 PendingIntent를 생성하고, setOnClickPendingIntent()를 통해 버튼을 클릭했을 때 수행할 PendingIntent를 지정합니다. 홈스크린 위젯에서 액티비티를 호출할 때는 액티비티 스택이 없는 상태이므로 Intent.FLAG_ACTIVITY_NEW_TASK 플래그를 지정하여 액티비티가 새로운 태스크에서 실행되도록 지정해야 합니다.

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



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




출처 : http://androidhuman.tistory.com/entry/%ED%99%88%EC%8A%A4%ED%81%AC%EB%A6%B0-%EC%9C%84%EC%A0%AF%EC%9D%84-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90-%EB%B2%84%ED%8A%BC-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0

Posted by 광포한곰돌이