Presentation is loading. Please wait.

Presentation is loading. Please wait.

Android Application 애플리케이션 위젯.

Similar presentations


Presentation on theme: "Android Application 애플리케이션 위젯."— Presentation transcript:

1 Android Application 애플리케이션 위젯

2 애플리케이션 위젯 애플리케이션 위젯은 안드로이드 홈 스크린에 보이는 시계, 액자, 음악 컨트롤 등을 지칭하는 이름이다. 보통 그냥 위젯이라고도 한다. 크기는 위젯 개발 시에 지정해줄 수 있다. 위젯을 개발함에 있어 주의해야 할 것 중 가장 중요한 것은 위젯을 위해 사용할 수 있는 뷰 클래스가 졍해져 있다는 것이다. 위젯에 사용할 수 있는 레이아웃 클래스 FrameLayout, LinearLayout, RelativeLayout 위젯에 사용할 수 있는 뷰 클래스 AnalogClock, Button, Chronometer, ImageButton, ImageView, ProgressBar, TextView, ViewFlipper, ListView, GridView, StackView, AdapterViewFlipper

3 애플리케이션 위젯 위젯의 구성요소 애플리케이션 위젯의 구성 및 크기 그리고 작성 방법
애플리케이션 위젯을 생성하기 위해서는 기본적으로 세 개의 요소가 필요하며, 이 위젯을 등록하거나 설정을 변경해야 한다면 추가적인 액티비티도 필요. 위젯의 구성요소 AppWidgetProviderInfo 클래스 애플리케이션 위젯의 모양 및 크기 그리고 갱신 주기 등을 다루는 클래스. /res/xml에 XML로 작성. AppWidgetProvider 클래스 애플리케이션의 동작을 정의하는 클래스다. 이 클래스를 상속하는 자바 클래스를 생성해서 위젯의 상태(업데이트, 활성화, 비활성화, 삭제)에 따른 동작을 정의하면 된다. 뷰 레이아웃 위젯의 모양을 XML로 정의하면 된다. 이 XML은 /res/layout에 저장하면 되고 레이아웃을 작성할 때는 px 단위를 쓰지 말아야 하며, 최대한 dp로 작성하고 비율을 분할해야 하는 경우에는 layout_weight 속성을 사용해야 한다. 위젯의 모양 위젯은 위젯을 감싸고 있는 프레임과 이 프레임을 감싸고 있는 바운딩 박스로 구성되어 있다. 또한 프레임 내에 있는 위젯의 내부를 위젯 컨트롤이라고 한다.

4 애플리케이션 위젯 /res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:orientation="vertical" > <TextView android:gravity="center" android:text="시간" android:textColor="#000000" /> </LinearLayout>

5 애플리케이션 위젯 /res/xml/time_appwidget_provider.xml
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android=" android:minHeight="60dp" android:minWidth="60dp" android:updatePeriodMillis="0" > </appwidget-provider> 매초마다 위젯의 시간을 갱신해야하기에 updatePeriodMillis 속성에 1000을 지정해서 1초마다 AppWidgetProvider가 호출되게 한다. 하지만 updatePeriodMillis는 지정한 시간을 항상 보장하지 않으므로 우리가 원하는 결과를 얻기 힘들다 1초마다 시간을 갱신하기 위해서는 자바의 Timer와 TimerTask 클래스를 사용해야 한다.

6 애플리케이션 위젯 /src/com/example/appwidgetclock/MainActivity.java
package com.example.appwidgetclock; import java.util.Calendar; import java.util.Timer; import java.util.TimerTask; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.widget.RemoteViews; public class MainActivity extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Timer timer = new Timer(); timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000); } MainActivity 클래스에는 위젯의 내용을 갱신하기 위해 호출되는 onUpdate() 메소드와 매초마다 실행되는 TimeTask를 상속하는 MyTime 클래스가 있다. onUpdate() 메소드에서는 Timer 클래스의 scheduleAtFixedRate() 메소드를 사용해서 매초마다 TimerTask를 상속하는 MyTime 클래스가 실행되도록 스케줄해야 한다.

7 애플리케이션 위젯 /res/xml/time_appwidget_provider.xml
private class MyTime extends TimerTask { RemoteViews remoteViews; AppWidgetManager appWidgetManager; ComponentName thisWidget; public MyTime(Context context, AppWidgetManager appWidgetManager) { this.appWidgetManager = appWidgetManager; remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main); thisWidget = new ComponentName(context, MainActivity.class); } @Override public void run() { remoteViews.setTextViewText(R.id.text, getTime()); appWidgetManager.updateAppWidget(thisWidget, remoteViews); // 현재 시간/분/초를 반환하는 메소드 private String getTime() { Calendar now = Calendar.getInstance(); int h = now.get(Calendar.HOUR_OF_DAY); int m = now.get(Calendar.MINUTE); int s = now.get(Calendar.SECOND); return h + ":" + m + ":" + s; MyTime 클래스의 생성자에서 위젯을 표시하기 위한 RemoteViews 객체와 현재 클래스를 나타내는 ComponentName 객체를 생성한다. 위젯을 표시하는 RemoteViews 객체에서는 setTextViewText() 메소드를 호출해서 현재 시간을 설정하고 있다. 현재 시간은 getTime() 메소드가 반환한다. 이렇게 새로운 시간이 설정된 RemoteViews 객체를 AppWidgetManager 클래스의 updateAppWidget() 메소드를 사용해서 위젯을 갱신하면 변경된 시간이 보여진다.

8 애플리케이션 위젯 AndroidManifest.xml MainActivity 클래스를 리시버로 선언한다.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" package="com.example.appwidgetclock" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:allowBackup="true" > <receiver android:name=".MainActivity" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" </receiver> </application> </manifest> MainActivity 클래스를 리시버로 선언한다. APPWIDGET_UPDATE 액션을 <intent-filter>에 선언한다. time_appwidget_provider.xml을 <meta-data>에 지정한다.

9 애플리케이션 위젯

10 < 참조 > 200개의 단개별 예제로 배우는 안드로이드 제이펍


Download ppt "Android Application 애플리케이션 위젯."

Similar presentations


Ads by Google