2012-03-02 2 views
3

사용자 유형에 따라 여러 테마가 있으므로 브랜드 이름을 바꾸려는 태블릿 애플리케이션이 있습니다.Android 애플리케이션에서 테마 이름을 동적으로 찾습니다.

현재 적용되고있는 테마의 이름을 찾고 그 테마를 기반으로 일부 백엔드 기능 변경을 수행 할 수 있습니다.

올바른 이미지 리소스 (R.style.redtheme)를 전달하는 한 괜찮 으면서 이미지 리소스를 동적으로 설정해야하지만 동적으로 설정하고 싶습니다.

TypedArray a = getTheme().obtainStyledAttributes(R.style.redtheme, new int[] {aTabResource.mDrawableAttrId}); 

스타일을 만들려면 사용자 지정 특성을 만든 다음 스타일에서 재정의하십시오.

테마를 얻는 간단한 방법이 없다면, 그냥 환경 설정을 저장합니다.

답변

7

패키지 관리자는 상당히 많은 메타 데이터에 액세스 할 수 있습니다.

는 그것은 다음과 같이 액세스 할 수 있습니다이 실행 된 후

int theme = 0; //0==not set 
try 
{ 
    String packageName = getClass().getPackage().getName(); 
    PackageInfo packageInfo = getPackageManager().getPackageInfo(packageName, PackageManager.GET_META_DATA); 
    theme = packageInfo.applicationInfo.theme; 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

는, 주제는 스타일 리소스를해야합니다.

+4

약간의 문제가 있었지만 패키지 이름이 잘못되었습니다. 당신이 '문자열 여기서 packageName = mContext.getPackageName()에 첫 번째 라인을 변경하는 경우 작동, '어디'mContext'가 활동 즉 '개인 무효 createActivity (번들 savedInstanceState) { 된 setContentView (R의 맥락이다. layout.welcome_layout); mContext = this; ' –

+3

getClass(). getPackage()가 우리가 찾고있는 패키지가 아닙니다. mContext.getPackageName()을 사용해야합니다. – GetUsername

+0

getClass(). getPackage()는 응용 프로그램 패키지를 반환합니다. mContext.getPackageName()은 현재 파일에 해당하는 패키지 이름을 반환합니다. – Shellum

관련 문제