[Android] 홈 화면 위젯에 폰트 적용하기

안드로이드 위젯 폰트 변경

이 글까지 오셨다는 것은...이 아니라 이 글을 쓰게 된 것은
activity에서 typeface를 활용하여 폰트를 변경하는 것은 성공하였으나
홈 화면 위젯에 폰트를 바꾸지 못해서 구글링을 했는데
뜬구름 잡는 소리만 있고 제대로 된 설명이 없었다 라는 이유입니다

잡소리 없이 바로 말씀드리겠습니다.

방법은, Canvas를 사용, Bitmap을 만들어서 그 위에 차례대로 text를 그린 후에,
이 bitmap을 레이아웃의 이미지뷰(다른것도 됩니다만...)와 교체해버리는 것입니다.

어때요, 참 쉽죠?























라고 하면 구글링해서 나온 다른 글과 다를바가 없잖나?! 이므로
잠깐 코드를 주섬주섬..

일단 text를 그리기 위한 Paint 객체를 만듭니다.

Paint paint1 = new Paint();
paint1.setAntiAlias(true); // option
paint1.setColor(/* Color */);
paint1.setTypeFace(/* TypeFace */);
paint1.setTextSize(/* Text Size */);

뭐 윤곽선을 그린다던가, 크기가 다른 여러 글씨를 한번에 쓴다거나 하실 계획이시라면
따로다로 객체를 선언해주세요.
외곽선은 .setStrokeWidth(/* int Size */)로 배경 글씨 페인트를 설정하여 그려주시고 그 위에  보통의 텍스트를 그려 주시면 됩니다.

자 그렇다면...

Bitmap bitmap = Bitmap.createBitmap(/*int width, int height, */ Bitmap.Config.ARGB_4444);
16-bit ARGB를 사용해서 width * height size의 bitmap을 하나 만들었슴니다..

그러면,
Canvas canvas = new Canvas(bitmap); // 하면 생기죠?
bitmap.eraseColor(0); // 혹시 모르니까 초기화를 한번 해주었습니다.

자 그렇다면 이제 다 했습니다.

canvas.drawText("내용임니다", /* horizontal position, vertical position, */ paints1);
을 해주시면 bitmap에 text가 원하는 paint로 그려지게 되지요...

이 후에
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout./*widget layout*/);

로 받은 views에다가
views.setImageViewBitmap(R.id./*imageview to replace*/, bitmap);
해주시면 됩니다. 이미지뷰 말고 전체 리모트뷰를 갈아엎을수도 있으니 참고하세요

그리고 마지막에 appWidgetmanager.updateAppWidget(/*blah*/); 해주시면 끗


대충 요런 걸 얻을 수 있게 되지요

댓글

이 블로그의 인기 게시물

중국 컵라면 강사부 홍소우육면 康师傅 红烧牛肉面 캉시푸 홍샤오니우러우미엔

중국 농심 컵라면 김치라면 辣白菜拉面 랄백채랍면 라바이차이라미엔 후기

칭다오 류팅공항 퍼스트클래스 라운지 후기 Qingdao Airport TAO First Class Lounge