Android Make a Widget

사용 언어: Kotlin 1.4.30
사용 버전: Android Studio 4.1.2


안드로이드 Make a Widget을 해보겠습니다.

Widget은 앱을 실행하지 않고 홈화면에 앱의 편리한 기능들을 사용할 수 있게 만들어주는 걸 말합니다.







Widget을 한 번 만들어봅시다.



Widget을 만들 위치를 정하고 새로운 Widget을 만들어줍니다.

New - Widget - App Widget







아래의 창이 나옵니다.



Class Name에 원하는 이름을 적습니다.

Placement는 홈 화면에 사용할 것인지, 잠금 화면에 사용할 것인지, 아니면 두군데 모두 사용할 것인지를 정할 수 있습니다. Homescreen은 홈 화면에만 사용하겠다는 뜻입니다.

Resizable은 Widget의 크기를 변경할 수 있는지 설정합니다. Both는 가로, 세로 모두 크기 조절이 가능하다는 뜻입니다.

Minimum Width (cells)는 Widget을 최소로 줄였을 때의 너비 크기를 말합니다. 1은 1칸이라는 뜻입니다.

Minimum Height (cells)는 Widget을 최소로 줄였을 때의 높이 크기를 말합니다. 1은 1칸이라는 뜻입니다.

Configuration Screen은 위젯을 생성하기 전 설정같은 것을 할 수 있게 만드는 창을 말합니다. 지금은 다루지 않겠습니다. 체크하지 않았습니다.

Source Language는 Kotlin을 사용합니다.


Finish를 누릅니다.



AndroidManifest.xml파일로 가면 방금 생성한 Widget이 자동으로 추가된것을 확인할 수 있습니다.







res - xml 에 가면, my_app_widget_info.xml이라는 파일이 생성되어 있습니다.






내용은 아래와 같습니다.




initialKeyguardLayout과 initialLayout은 Widget의 디자인을 나타내는 파일을 가리킵니다.

minWidth와 minHeight는 위젯의 최소 크기를 나타냅니다. 아까 만들때 설정한 1 Cell이 40dp가 된겁니다.


Cell Size 변환법은 아래를 참고하시면 됩니다.





previewImage는 위젯 생성화면에서 보여지는 미리보기 화면입니다. 지금은 기본으로 제공된 Png 파일이 설정되어 있습니다.





updatePeriodMillis는 위젯이 갱신되는 주기를 나타냅니다. 86400000(24 * 60 * 60 * 1000)로 하루 간격으로 갱신되도록 주기가 설정되었네요.

widgetCategory는 어떤 screen에 표시될지를 나타냅니다. 우리는 homescreen을 설정했기때문에 여기서도 home_screen으로 적혀있습니다.

참고로 lockscreen은 Android 5 이상은 안된다고 하네요.





이제, Widget Layout을 봅시다.

Widget Layout은 일반 Layout과 비슷합니다. 다만, RemoteViews를 기반으로 한 layout만 사용할 수 있기 때문에 다양한 Layout을 사용할 수 없습니다.







아까 Widget을 만들면서 자동으로 생성된 layout으로 갑니다.

저는 my_app_widget.xml로 만들어졌네요.





미리보기로 보면 이렇습니다.





기본 코드입니다.




LinearLayout으로 변형을 줘봅시다.











기본으로 있던 widgetText를 지웠기 때문에 MyAppWidget.kt 파일에서 해당 기능을 제거해줘야합니다.

우리가 만든 MyAppWidget.kt 파일로 갑니다.

views.setTextViewText(R.id.appwidget_text, widgetText)를 주석처리 합니다.






실행해 봅시다.

화면을 꾹 눌러 위젯을 추가하면 다음과 같이 됩니다.

우리가 최소 크기가 1 칸으로 했기 때문에 1 칸 짜리 위젯이 생깁니다.





크기를 변경해 볼까요?

꾹 눌러서 제자리에 두면 크기 조절할 수있는 점이 생깁니다.

늘려주면 됩니다.





지금은 버튼을 눌러도 아무런 작동도 안 합니다.


끝.



카테고리: Android


댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)

Android Minimum touch target size

Python bs4.SoupStrainer()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()