public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources themeR = null ;
try {
themeR = getThemeResources( "com.example.testskin01" , this );
} catch (NameNotFoundException e) {
e.printStackTrace();
}
int resID = themeR.getIdentifier( "activity_main2" , "layout" , "com.example.testskin01" );
View themeLayout = (View)themeR.getLayout(resID);
setContentView(themeLayout);
}
private static Resources getThemeResources(String themePackage, Context context) throws NameNotFoundException {
try {
return context.getPackageManager().getResourcesForApplication(themePackage);
} catch (Exception e) {
return null ;
}
}
}
|
안녕하세요?
현재 개발중인 어플에 스킨 변경 기능을 구현 중인데요.
여기저기 자료를 찾아보니 카톡과 같은 형식으로 하는 것이 제일 나은듯 하더라구요.
카톡에 적용된 방식은..
다른 패키지에 Resources 자료를 넣어두고..
스킨을 변경할때는 그 패키지를 설치한 후 Resources자료를 가져와서 대체하는 방식 인듯 하더군요.
그래서 이곳 저곳 뒤지며 자료를 찾아본 결과..
저런 소스가 만들어졌습니다..
시험할 기기에
com.example.testskin01 이라는 패키지를 설치하고
그 패키지 내에는 activity_main2.xml 라는 레이아웃이 있습니다.
그리고 액티비티를 가진 패키지에 위의 소스를 기입 해서 실행 시켰죠..
그런데.. activity_main2의 리소스ID 까지는 잘 불러와지는데
View themeLayout = (View)themeR.getLayout(resID);
이부분.. 이부분에서 꼭 에러가 나더라구요..
에러는
java.lang.ClassCastException: android.content.res.XmlBlock$Parser
이라고 뜨네요....
저에게 도움을 주실수 있으신분들의 답변을 기다리고 있겠습니다.