woong's

Android widget 사용하기 본문

Develop/Android

Android widget 사용하기

dlsdnd345 2016. 2. 14. 16:17
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Android widget 사용하기


이번 디데이 앱을 만들면서 위젯을 사용하게 되어서 저도 사용은 해보았지만 , 

정리한 자료가 없어 이렇게 포스트를 쓰고 있습니다 .


Widget 을 사용하기 위해 준비해야 할것들


1. 보여질 Widget 의 레이아웃

2. Widget_Configration xml 

3. AppWidgetProvider 를 상속한 class

4. receiver


입니다 .


위 순서대로 진행을 해보겠습니다 .


1. 보여질 Widget 의 레이아웃




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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" >
 
    <RelativeLayout
        android:layout_width="144dp"
        android:layout_height="144dp"
        android:background="#ffff00" >
 
        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            />
    </RelativeLayout>
 
</LinearLayout>

 

저는 이와 같이 구성했습니다 .

기존의 android xml 구성하듯이 구성하시면 됩니다 .


2. Widget_Configration xml 


1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/widget_layout"
    android:minHeight="144dp"
    android:minWidth="144dp"
    android:updatePeriodMillis="0"
     >

</appwidget-provider>

 

Widget_Configration xml 작성한 부분입니다 .


android:initialLayout 


은 위에서 방금 작성한 xml 파일입니다 .


위젯 레이아웃으로 사용됩니다 .

위젯의 레이아웃은 제한적입니다 . 

레이아웃 : FrameLayout , LinearLayout , RelativeLayout 

뷰 : Button , TextView , ImageView , PrograssBar

기타 : AnalogClock , ImageButton , Chronometer

만 지원을 합니다. 



minHeight , minWidth 


는화면상의 크기를 지정

72dp 단위로 작성해야 합니다 . 위젯의 1칸 크기는 가로 세로 72에 dp 입니다.


셀의 크기는 74dp 이나 오차를 감안하여

(셀수 * 74) - 2dip 

아래의 공식을 통해 대체로 72dp 를 이용한다고 합니다 .


저는 2X2 로 만들었습니다 .



updatePeriodMillis 


는 위젯이 갱신되는 주기 입니다 .

 위젯이 갱신되는 주기가 짧으면 디바이스에 부담와 배터리 사용량이 감소가 많이 되므로 

구글 측에서 최소 단위를 30분으로 지정해 아무리 작게 주어도 최소 30분 주기로 갱신이 됩니다 .


또한 저와 같이 0 으로 지정을 하면 따로 갱신을 하지 않습니다 .


마지막으로 앱 위젯 사이클에 대해 간략히 설명하겠습니다 .


앱 위젯 사이클


ACTION_APPWIDGET_ENABLED : 앱위젯의 첫번째 인스턴스가 설치 될때 전달

ACTION_APPWIDGET_DELETED : 앱위젯의 인스턴스중 일부가 삭제 될때 전달

ACTION_APPWIDGET_DISABLED : 앱위젯의 인스턴스가 제거 될때 전달

ACTION_APPWIDGET_UPDATE : 개별 앱위젯을 갱신할때마다 전달 * 반드시 처




3. AppWidgetProvider 를 상속한 class


1
2
3
4
5
6
7
8
9
10
11
12
13
public class Widget extends AppWidgetProvider {
 
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
 
        RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        remoteView.setTextViewText(R.id.title, "웅스 블로그");
        appWidgetManager.updateAppWidget(appWidgetIds, remoteView);
 
    }
 
}



onUpdate 메서드는 제일 중요한 메서드입니다 .

방송을 갱신하는 역할을 하고 있습니다 .


제가 지금 만드는 위젯은 화면에 보려여지는 부분만 진행하기때문에 많은것 필요없이 onUdate 만 구현하면 되겠습니다 .


4. receiver


마지막으로 리시버를 등록하면 저희가 만든 위젯을 확인할수 있습니다 .


Manifast.xml 파일에 <application> 태그 안에 리시버를 등록합니다 .


1
2
3
4
5
6
        <receiver android:name=".Widget" android:label="위젯">
            <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_configuration"/>
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>                
            </intent-filter>
        </receiver>

 

 

receiver 의 name은 AppWidgetProvider 상속을 받아 만든 클래스를 명시해 주면 됩니다 .

receiver label 은 위젯 목록의 제록이 되겠습니다.


receiver 에 meta-data , intent-filter 를 지정해야합니다 .


 meta-data 에는 저희가 위해서 만든 widget_configration을 설정합니다 .


마지막으로 intent-filter 를 등록합니다 .


이렇게 진행을 다하시고 프로젝트를 실행후 위젯화면에 가면 위젯목록에 저희가 만든 위젯이 있는것을 확인할수 있습니다 .

 






'Develop > Android' 카테고리의 다른 글

Android widget configure 사용하기  (1) 2016.02.14
Android Widget ReSize 사용하기  (0) 2016.02.14
Android CheckBok 사용하기  (0) 2016.02.14
Android TextView ... 처리  (0) 2016.02.14
안드로이드 레이아웃 최적화  (1) 2016.02.14
Comments