posted by 네코냥이 2014. 11. 18. 16:13

3. Adding the AppWidgetProviderInfo Metadata

AppWidgetProviderInfo 는 xml 파일로 정의하며, App Widget 을 작성하기 위해서 반드시 필요한 파일이다. 이 XML 파일에는 initial layout resource, App Widget 의 upate 주기, 그리고 옵션으로 처음 생성 시점에 실행되는 configuration Activity 정보를 설정한다. XML 파일에 <appwidget-provider> element 로 정의하며, XML 파일은 /res/xml 디렉토리에 위치한다.

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"

    android:minWidth="294dp"

    android:minHeight="72dp"

    android:updatePeriodMillis="86400000"

    android:previewImage="@drawable/preview" <!-- android 3.0 이후에 추가 -->

    android:initialLayout="@layout/example_appwidget"

    android:configure="com.example.android.ExampleAppWidgetConfigure"

    android:resizeMode="horizontal|vertical"<!-- android 3.1 이후에 추가 -->

</appwidget-provider>

다음은 각 attribute 에 대한 설명이다.

3.1 minWidth 와 minHeight

AppWidget layout 의 최소 폭과 높이의 값을 설정한다.

Home Screen 에 보여질 Widget 에 대한 높이와 폭을 지정하는 것이다. Home Screen 은 아이콘 크기의 Cell 형태로 이루어지져 있다. 따라서 Widget 의 폭과 높이를 지정할 때, HomeScreen 에 놓여질 Cell 의 크기를 기준으로 계산을 해야한다. 기본적인 Cell 의 크기는 74 dp 이며, 그 값을 계산하는 방식은 아래와 같다.

(number of cell * 74)  - 2

주의 : Home Screen 에서 Widget 이 가질 수 있는 최대의 Cell 의 갯수는 4 x 4 이다, 이보다 크게 Widget 의 크기를 디자인해서는 안된다.

3.2 updatePeriodMillis

AppWidget Framework 가 AppWidgeProvider.onUpdate() 메소드를 얼마나 자주 호출해야 하는지를 정의한다. 하지만 실제로 onUpdate() 가 정확한 시간에 호출되는지는 보증할 수 없다. 가능한한 제 시간에 호출되는 것으로 가정해야 하며, 어떨 때는 Battery 문제로 인하여  한시간에 한번도 호출되지 않을 수도 있다. 주로 사용자가 15분 주기 또는 1시간 주기등으로 설정한다.

주의 : updatePeriodMillis 를 설정해 놓으면 Device 가 sleep mode(주로 화면이 꺼진 상태) 로 되어있을 지라도 update 를 수행하기 위해서 Device 를 깨워서 동작을 한다. 이러한 작업이 1시간 주기로 동작하면, Battery 문제가 없지만, 자주 호출이 되면 Battery 를 많이 소모하게 된다. 따라서 Device 가 꺠어있는 상태에서만 동작하도록 하려면 updatePeriodMillis 의 값은 “0” 으로 설정하고, AlarmManager 를 사용하여 주기적으로 동작하도록 설정해야 한다. 이때 Alarm 의 Type 은 ELASPED_REALTIME 또는 RTC  로 설정하면 된다.

3.3 initialLayout

AppWidget layout 을 정의하기 위한 layout resource 를 지정한다.

3.4 configure

사용자가 App Widget 을 추가할 때 실행할 Activity 를 지정한다. 이 Activity 는 App Widget 의 환경설정을 하는데 주로 사용한다.

3.5 previewImage

App Widget 을 추가하기 위해서 Menu 를 선택하고 App Widget 목록에서 해당 Widget 에 대한 미리보기 이미지를 지정한다. 이 항목이 지정되지 않았을 경우에는 디폴트 Icon 으로 나타난다. 이 속성은 Android 3.0 부터 지원한다.

3.6 autoAdvanceViewId

해당 Widget host 에 의해서 auto-advanced 되어야 하는 App Widget subview 의 view ID 를 기술한다. 이 속성은 Android 3.0 부터 지원한다.

3.7 resizeMode

Home Screen 에서 Widget 의 폭과 높이에 대해서 Resize 할 것인지를 정의한다. 값은 “vertical”, “horizontal”, “none” 으로 설정한다. 이 속성은 Android 3.1 부터 지원한다.

posted by 네코냥이 2014. 11. 18. 15:58

리시버를 2개 선언하되,

해당 프로바이더는 다른 클래스를 가르키고 있다.

공통된 부분이 있다면 따로 모듈로 빼는 수밖에 없다.


You need a receiver definition for each type in your manifest file like:

    <receiver android:name=".MyWidget" android:label="@string/medium_widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/medium_widget_provider" />
    </receiver>

    <receiver android:name=".MyWidget" android:label="@string/large_widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/large_widget_provider" />
    </receiver>

This would allow you to have the same AppWidgetProvider class be used for multiple widgets, with different widget names and different sizes defined in the <appwidget-provider> XML.

Now if you need more differences in your widgets than what is in the <appwidget-provider> XML I would create a base widget class that implements all the common behavoir between the different types:

public abstract class MyBaseWidget extends AppWidgetProvider

And then each of your concrete implementations could extend MyBaseWidget. Then in your manifest file you would have a receiver definition for each of your concrete implementations like:

    <receiver android:name=".MyMediumWidget" android:label="@string/medium_widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/medium_widget_provider" />
    </receiver>

    <receiver android:name=".MyLargeWidget" android:label="@string/large_widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/large_widget_provider" />
    </receiver>
share|edit|flag


posted by 네코냥이 2014. 11. 18. 11:18

http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout


.

A RemoteViews object (and, consequently, an App Widget) can support the following layout classes:

And the following widget classes:

Descendants of these classes are not supported.

RemoteViews also supports ViewStub, which is an invisible, zero-sized View you can use to lazily inflate layout resources at runtime.

.



posted by 네코냥이 2014. 11. 3. 18:19


How to concatenate strings with padding in sqlite - Stack Overflow.pdf



-- the statement below is almost the same as
-- select lpad(mycolumn,'0',10) from mytable

select substr('0000000000' || mycolumn, -10, 10) from mytable

-- the statement below is almost the same as
-- select rpad(mycolumn,'0',10) from mytable

select substr(mycolumn || '0000000000', 1, 10) from mytable



+ 대신 || 를 사용해라.

posted by 네코냥이 2014. 10. 23. 14:02




// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(context.getMainLooper());

Runnable myRunnable = new Runnable(...); // This is your code
mainHandler.post(myRunnable);


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

App Widgets 에서 사용할 수 있는 레이아웃  (0) 2014.11.18
[SQLite] concat, append String text  (0) 2014.11.03
[Android] Dialog 배경 클릭시 종료  (0) 2014.10.17
Activity 사이즈 동적 조절.  (0) 2014.10.06
SQLite 내장함수  (0) 2014.09.16
posted by 네코냥이 2014. 10. 23. 11:01

링크:http://spid104.blog.me/110186663145



SimpleDateFormat  JAVA / STUDY 

2014/03/07 13:19

복사http://spid104.blog.me/110186663145

전용뷰어 보기


이번에 보게 될 것은 'SimpleDateFormat'이라는 클래스입니다.

 

이것은 사실 안드로이드보다 자바에 있는 클래스인데요, 시간과 날짜정보를 가져 올 때 

 

아주 유용합니다. 

 

물론  SimpleDateFormat을 안드로이드에도 사용 가능합니다.

 

자세한 내용은 Oracle document 를 참고하세요.

 

일단 사용 가능한 옵션은 아래 표와 같습니다.

 

<SimpleDateFormat 옵션> 

 

표만 봐선 잘 모르겠죠.?

 

간단한 예를 만들어 봤습니다.

 

일단은 포맷부터 보겠습니다.

 

  1. Date date=new Date(System.currentTimeMillis());
  2. SimpleDateFormat dateformat=new SimpleDateFormat("옵션");
  3. String currentdate=dateformat.format(date);

이게 다입니다. 간단하죠?

 

위의 SimpleDateFormat 옵션 table에서  'Letter'라는 부분을  위 코드의 '옵션'에 넣어주면, SimpleDateFormat 옵션 table의 'Examples'와 같이 변환됩니다

 

그럼 간단한 예를 들어보겠습니다.

 

2014년 03월07일 오후12시00분 금요일로 예를 들겠습니다.

 

 

  1. Date date=new Date(System.currentTimeMillis());

  2. SimpleDateFormat CurTimeFormat=new SimpleDateFormat("hh:mm");

  3. String time=CurTimeFormat.format(date);

time=12:00 라고 나올겁 니다.

 

먼가 허전하니까 앞에 오전 오후라는 부분을 넣으려면, 'a'만 추가하시면 됩니다.

 

  1. Date date=new Date(System.currentTimeMillis());

  2. SimpleDateFormat CurtimeFormat=new SimpleDateFormat("a hh:mm");

  3. String time=CurtimeFormat.format(date);

time==> 오후 12:00

 

그럼 이번엔 날짜를 만들어보죠

 

  1. Date date=new Date(System.currentTimeMillis());

  2. SimpleDateFormat CurDateFormat=new SimpleDateFormat("yyyy-MM-dd");

  3. String currentdate=CurDateFormat.format(date);

currentdate==> 2014-03-07

 

마찬가지로 요일도 넣어보겠습니다.

 

  1. Date date=new Date(System.currentTimeMillis());

  2. SimpleDateFormat CurDateFormat=new SimpleDateFormat("YYYY-MM-dd E");

  3. String currentdate=CurDateFormat.format(date);

currentdate==> 2014-03-07 금

 

 

SimpleDateFormat!!

 

참 간단하면서도 유용한 클래스죠? 


다른 것도 한번 해보시기 바랍니다.

 

[출처] SimpleDateFormat|작성자 Answer


posted by 네코냥이 2014. 10. 17. 09:25


Dialog Outside Background Click 종료.pdf


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

[SQLite] concat, append String text  (0) 2014.11.03
[Android.] UI Thread Handler Main  (0) 2014.10.23
Activity 사이즈 동적 조절.  (0) 2014.10.06
SQLite 내장함수  (0) 2014.09.16
Sqlite 뷰어  (863) 2014.08.28
posted by 네코냥이 2014. 10. 6. 14:25

getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL,

           LayoutParams.FLAG_NOT_TOUCH_MODAL);

// 생성시 위의 값도 해주면, 액티비티 뒤에있는 뷰도 클릭이 가능



// 이 함수는 액티비티 크기를 바꿔준다.

// dynamically 사용도 가능.

private void ptc_SetScreenSize() {

View viewRoot = getWindow().getDecorView().getRootView();

WindowManager.LayoutParams params = (LayoutParams) viewRoot.getLayoutParams();

if(params==null)

{

log.i("viewRoot.getLayoutParams is NULL");

return;

}

params.height = 200 + 200 * new Random().nextInt(100) / 100;

params.gravity = Gravity.TOP;

((WindowManager)getSystemService(Context.WINDOW_SERVICE)).updateViewLayout(viewRoot,params);

}





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

[Android.] UI Thread Handler Main  (0) 2014.10.23
[Android] Dialog 배경 클릭시 종료  (0) 2014.10.17
SQLite 내장함수  (0) 2014.09.16
Sqlite 뷰어  (863) 2014.08.28
[안드로이드] 기본 Dialog  (0) 2014.08.28
posted by 네코냥이 2014. 9. 16. 17:26


스토브 훌로구 __ xpath 를 이용, java 에서 xml 문서 쉽게 파싱하기.pdf


'JAVA > JAVA' 카테고리의 다른 글

[JAVA] HashTable 를 for loop 구문에서 사용하기.  (0) 2014.11.22
SimpleDateFormat 예제  (299) 2014.10.23
자바 정규식 표현  (0) 2014.08.27
[자바] 형변환 캐스팅  (0) 2014.08.26
[JAVA] Random 클래스 (자바 램덤 클래스)  (0) 2013.06.13
posted by 네코냥이 2014. 9. 16. 09:28

SQLite에서 사용 가능한 SQL명령어 _ 네이버 블로그.pdf


choco chip cookie __ SQLite3 내장함수.pdf