

현재 우리 어플이다.
이걸 위젯에 띄울건데, 스톱워치기능을 이쁘게 꾸며서 위젯으로 띄우는게 이번 목표이다.
Widgets | Apple Developer Documentation
App widgets overview | Android Developers
Apple Widget Design가이드, android 공식문서를 참고했다.

@Override
public void onUpdate(...) {
RemoteViews smallView = ...;
RemoteViews tallView = ...;
RemoteViews wideView = ...;
Map<SizeF, RemoteViews> viewMapping = new ArrayMap<>();
viewMapping.put(new SizeF(150f, 100f), smallView);
viewMapping.put(new SizeF(150f, 200f), tallView);
viewMapping.put(new SizeF(215f, 100f), wideView);
RemoteViews remoteViews = new RemoteViews(viewMapping);
appWidgetManager.updateAppWidget(id, remoteViews);
}
가이드까지 친절하게 나와있다.. 사용자가 resize하면 미리 정해둔 사이즈별 View를 보여주는 코드이다.

@Override
public void onAppWidgetOptionsChanged(
Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
// Get the new sizes.
ArrayList<SizeF> sizes =
newOptions.getParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES);
// Check that the list of sizes is provided by the launcher.
if (sizes == null || sizes.isEmpty()) {
return;
}
// Map the sizes to the RemoteViews that you want.
Map<SizeF, RemoteViews> viewMapping = new ArrayMap<>();
for (SizeF size : sizes) {
viewMapping.put(size, createRemoteViews(size));
}
RemoteViews remoteViews = new RemoteViews(viewMapping);
appWidgetManager.updateAppWidget(id, remoteViews);
}
// Create the RemoteViews for the given size.
private RemoteViews createRemoteViews(SizeF size) { }
android dev에서도 위젯 크기를 결정할땐, 그 size를 case별로 나누어줘서 계산해야한다고 한다.
특정 함수를 사용하면 그 디바이스의 1셀을 계산한 뒤 n x n셀의 dp를 계산해주는 메소드가 있는지 검색해봤는데, dev에서도 하드코딩을한다.(…)
일반적으로 1셀이 몇dp인지 대략적인 가이드라인이 있긴하다.


일단 세로 2셀, 가로 4셀을 고정으로 하자. 팀원들 안드로이드 폰을 보니 가로 4셀도있고 5셀도있다. 2 x 4를 기준으로 먼저 디자인하자.
라이트 모드와 다크 모드가 있다.


검정배경 + 하얀텍스트 or 반투명 + 하얀텍스트 두개를 고려해서 만들어보자.
A안 ( 다크모드 )

다음 챕터에서 코드를 작성한다.