public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources themeR = null; //Resources 저장 대상
try {
//com.example.testskin01 패키지에서 Resources 가져옴
themeR = getThemeResources("com.example.testskin01", this);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
// activity_main2 레이아웃의 ID값 가져오기
int resID = themeR.getIdentifier("activity_main2" , "layout", "com.example.testskin01");
//id값에 따라 레이아웃 불러와 적용
View themeLayout = (View)themeR.getLayout(resID);
// 레이아웃 적용.
setContentView(themeLayout);
}
//다른 어플에서 Resources 가져오는 메소드
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
이라고 뜨네요....
저에게 도움을 주실수 있으신분들의 답변을 기다리고 있겠습니다.