woong's

Android widget configure 사용하기 본문

Develop/Android

Android widget configure 사용하기

dlsdnd345 2016. 2. 14. 16:22

Android widget configure 사용하기

 

 

최근에 웹 프로젝트하느라 정신이 없어 포스트를 많이 쓰지 못하고 있네요 ㅜ

이번에는 Android widget configure 에 대해 설명해 보겠습니다 .


Android widget 사용하기 

Android Widget ReSize 사용하기 

 

위 링크를 선행 학습하면 이번 포스트에 도움이 될것 같습니다 .


1
2
3
4
5
6
7
8
9
10
11
12
<?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="72dp"
    android:minWidth="72dp"
    android:updatePeriodMillis="0"
    android:previewImage="@drawable/img_widget"
    android:resizeMode="horizontal|vertical"
    android:configure="com.example.widgetsample.ConfigWidgetActivity"
     >
 
</appwidget-provider>

 

 

이번 포스트에서 추가 부분에 대해서 설명을 드리겠습니다 .


처음보는 previewImage 가 있습니다 .

previewImage 는 디바이스에서 위젯 메뉴의 이미지를 지정하는 것이 되겠습니다 .


 

 

저의 상징마크인 곰을 previewImage 에 넣어 보았습니다 .


이제 android : configure 에 대해 말씀드리겠습니다 .


android:configure="com.example.widgetsample.ConfigWidgetActivity" 


이와 같이 widget_configuration.xml 에 적용하였습니다 .


우선 프로젝트에 설정 화면에 나타날 레이아웃.xml 과 액티비티를 준비합니다 .

준비한 액티비티의 패키지.액티비티를 android:configure 넣어주면 되겠습니다 .


여기까지 진행하고 실행하면 위젯을 설치하지 못한다고 나타 납니다 .


Manifast.xml 파일의 위에서 만든 설정 액티비티에 intent-filter 를 추가하고 APPWIDGET_CONFIGURE 를 넣습니다. 


1
2
3
4
5
6
7
        <activity android:name="ConfigWidgetActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
             >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>

 

 

마지막으로 액티비티를 작성하면 ConfigActivity 를 사용할수 있습니다 .


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.example.widgetsample;
 
import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RemoteViews;
 
public class ConfigWidgetActivity extends Activity {
 
    int mAppWidgetId;
    EditText widgetTitle;
    RemoteViews remoteView;
    AppWidgetManager appWidgetManager;
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_widget_config);
        
         Intent intent = getIntent();
            Bundle extras = intent.getExtras();
            if (extras != null) {
                mAppWidgetId = extras.getInt(
                        AppWidgetManager.EXTRA_APPWIDGET_ID, 
                        AppWidgetManager.INVALID_APPWIDGET_ID);
            }
        
            appWidgetManager = AppWidgetManager.getInstance(this);
            remoteView = new RemoteViews(this.getPackageName(),
                    R.layout.widget_layout);
            
        widgetTitle = (EditText)findViewById(R.id.widget_title);
    }
 
    public void getWidget(View view){
 
            remoteView.setTextViewText(R.id.title, widgetTitle.getText().toString());
            appWidgetManager.updateAppWidget(mAppWidgetId, remoteView);
            
            Intent resultValue = new Intent();
            resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
            setResult(RESULT_OK, resultValue);
            finish();
    }
    
}
 

 

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


설정 activity에서 2가지를 주의 하셔야 합니다 .


위젯host가 설정activity를 호출하므로 설정activity는 꼭 result를 리턴해야 한다. Intent로 넘어온 App Widget ID 값을 리턴해야 한다. (Intent에 EXTRA_APPWIDGET_ID로 저장되어 있다.)


위젯이 추가될 떄 onUpdate()가 호출되지 않는다. 그렇기 때문에 설정activity에서 위젯 update관련 작업을 해야 한다. 처음만 호출이 되지 않고 두번째부터는 호출이 됩니다 .


1
2
3
4
5
6
7
8
         Intent intent = getIntent();
            Bundle extras = intent.getExtras();
            if (extras != null) {
                mAppWidgetId = extras.getInt(
                        AppWidgetManager.EXTRA_APPWIDGET_ID, 
                        AppWidgetManager.INVALID_APPWIDGET_ID);
            }
        

 

 

앱 위젯 ID 를 가져 오는 코드입니다 .


1
2
3
4
            appWidgetManager = AppWidgetManager.getInstance(this);
            remoteView = new RemoteViews(this.getPackageName(),
                    R.layout.widget_layout);
appWidgetManager.updateAppWidget(mAppWidgetId, remoteView);

 

appWidgetManager 생성 하고 remoteView 를 통해 레이아웃을 업데이트 하는 코드 입니다 .


1
2
3
4
            Intent resultValue = new Intent();
            resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
            setResult(RESULT_OK, resultValue);
            finish();

 

마지막으로 Intent 를 진행 합니다 .

 

 




여기 까지 진행을 하시면 이와 같이 설정 화면만든것을 위젯을 설치하기 전에 볼수 있습니다 .

저는 간단하게 EditText 를 통해서 값을 넘겨서 위젯에 보여주는 형식으로 만들었습니다 .

이 설정 화면에서 위젯의 컬러나 , 투명도 , 값 등을 설정해서 위젯을 생성할수 있을것 같습니다 .




설정 화면을 통해 입력한 데이터 값을 출력한 위젯을 완성했습니다 ^^


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

Android ViewPager 사용하기  (0) 2016.02.14
Android Color Picker 사용 하기  (0) 2016.02.14
Android Widget ReSize 사용하기  (0) 2016.02.14
Android widget 사용하기  (0) 2016.02.14
Android CheckBok 사용하기  (0) 2016.02.14
Comments