문제

AppWidget 애플리케이션이 있으며 사용자가 런타임에 적용 할 수있는 스킨을 만들 수 있습니다. 내가 선호하는 솔루션은 위젯의 ImageView에 맞게 스트레치 된 9 개의 패치 PNG 이미지가있는 APK 파일을 사용하는 것이지만 다른 포장 기술 (예 : ZIP 파일)을 사용해야 할 것 같아요.

내가 시도한 것 : context.getResourcesforApplication (my.app) .getResources ...을 사용하여 9 개의 패치 리소스를 가져 오기, 캔버스를 사용하여 비트 맵으로 변환하고 setImageViewBitap을 사용하여 비트 맵을 원격 View로 설정합니다. 변환하는 동안 결과보기 (mybitmap.setbounds (.., ..))의 크기를 지정해야했고 AppWidget의 너비/높이가 고정되지 않았기 때문에 작동하지 않았습니다. 아마도 내가 놓친 높이 등을 얻는 방법이있을 것입니다.

setImageViewURI ()를 사용하여 원격 뷰로 직접 리소스를 가져 오기 () 기능이 Android.Resource : // 더 이상 읽지 않는 것처럼 보이기 때문에 작동하지 않기 때문에 (ImageView 소스에서 주위를 찌르고 파일 경로 및 콘텐츠 만 읽는 것 같습니다. : // uri 's)

SetImageViewResource ()를 사용하여 RemoteView로 직접 리소스를 가져 오는 것은 외부 패키지에서 검색된 ID에 분명히 패키지 참조가 포함되지 않기 때문에 작동하지 않았습니다.

내가 피하려고하는 것은 모든 appwidget 너비와 높이를 하드 코딩하거나 별도의 포장 체계를 사용하는 것입니다.

AppWidget 스킨을 멋지게 구현하고 지식을 공유하고 싶은 사람이 있습니까? 또는 내 논리에 구멍이있을 수 있습니다.

지금은 여기에 없지만 필요한 경우 코드를 제공 할 수 있습니다.

도움이 되었습니까?

해결책

이 샘플 솔루션을 찾았습니다 http://www.siroccosoftware.com/devblog/?p=10

ImageView

Uri path = Uri.parse("android.resource://PACKAGE_NAME/RESOURCE_ID");

views.setImageViewUri(ID, path); 

RemoteView

RemoteViews views = new RemoteViews("PACKAGE_NAME", "LAYOUT_RESOURCE_ID");

다른 팁

이 문제를 해결하려고하는 동안 ImageView 코드를 가로 질러 달렸습니다.

URI가 "컨텐츠"URI가 아닌 경우 ImageView는 전화로 열려고합니다. Drawable.createFromPath(mUri.toString()), 본질적으로 URI가 아닌 길을 원합니다.

URI의 "파일 : ///"섹션을 제거하면 잘 작동합니다.

따라서 코드를 다음과 같이 업데이트 할 수 있습니다.

views.setImageViewUri(R.id.alarm, Uri.parse(f.getAbsolutePath()); 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top