2012-06-28 6 views
0

나는 스킨으로 사용하는 2 개의 테마와 그림을 포함하는 응용 프로그램을 개발 중입니다. 코드에서 전체 활동에 대한 주제를 설정할 수 있습니다. 내 문제는 사진과 관련하여 스킨을 정확하게 분리하는 방법을 모르겠다는 것입니다. 예를 들어, 나는 두 가지 주제 (흑백)를 가지고 있으며,이 주제에 맞는 그림들을 가지고있다. 테마에서 코드에서 스킨의 이미지를 모두 설정할 수 있도록 그림을 어떻게 분리 할 수 ​​있습니까?안드로이드에서 스킨을 관리 할 수있는 방법이 있습니까?

답변

2

죄송합니다. 나는 그 질문을 오해했다. 의견이 자연스러운 흐름을 갖도록 이전의 대답을 유지했습니다.

이 경우 Branding.java 클래스가 있습니다. 이 클래스는 brandname (귀하의 경우에는 Theme)을 가져 와서 해당 테마에 대한 고유 항목이 될 다양한 값과 문자열을 생성합니다. 예를 들어 스플래시 이미지의 이름을 dark_theme_splash.png 및 light_theme_splash.png로 지정합니다. Drawable을로드 할 때 Branding.getSplash()를 호출하면 선택한 현재 테마를 기반으로 드로어 블을 반환합니다.

public static Drawable getSplash() { 
    switch(MYApplication.Theme){ 
    case LIGHT: 
     return MYApplication.res.getDrawable(R.drawable.light_theme_splash); 
    } 
    return MYApplication.res.getDrawable(R.drawable.dark_theme_splash); 
} 

과의

당신이 가진 것 브랜딩 :
public class Branding { 

    public static final int LIGHT = 0; 
    public static final int DARK = 1; 

그런 다음 앱에 당신이있는 int current_theme있을 것입니다 그리고 당신은 즉석에서 원하는 테마로 설정합니다. 여기 아래

* 실제로 나는 8 가지의 테마를 가지고 응용 프로그램을 관리 * 요청하지 않은 질문에 대답 기존의 답변입니다. 일부는 극적으로 다릅니다. 지금까지 내가 찾은 최선의 해결책은 두 부분으로 나뉩니다.

) 1. 귀하의 build.xml. 다른 스킨이 적용된 앱을 제작 중이므로 .apk의 이름이 다르게 상상됩니다. build.xml에서 다른 대상을 활용하십시오. 예 :

<target name="release-themeone"> 
     <antcall target="-do-release" inheritAll="false"> 
     <param name="app.pkg" value="mapmyfitness" /> 
     <param name="app.pkg.name" value="com.themeone.android2" /> 
     <param name="launcher.icon" value="common_icon_launcher" /> 
     <param name=".app.name" value="DarkTheme+" /> /> 
     </antcall> 
    </target> 

2.) 이렇게하면 다른 빌드에 대해 서로 다른 매개 변수를 설정할 수 있습니다. 필자의 경우에는 드로어 블이 너무 많아서 다양한 드로어 블 폴더 내에서 드로어 블을 모두 관리하는 것이 번거로웠습니다. 따라서 드로어 블 폴더 자체에 모든 공통 자산을 넣습니다. 그런 다음 드로어 블 폴더 구조를 복제 한 드로어 블 외부에 폴더를 만들었지 만 테마의 이름 내에 포함되었습니다. 예를 들어 Themeone 폴더에는 Drawable, Drawable-hdpi 등이 포함됩니다. 이렇게하면 각 특정 대상이 필요한 드로어 블만 가져 오는 방식으로 빌드 시스템을 조작 할 수있었습니다.

<copy todir="bin/${app.pkg}/res/drawable" overwrite="true"> 
    <fileset dir="./brands/${brand.prefix}/drawable"/> 
    </copy> 
    <copy todir="bin/${app.pkg}/res/drawable-hdpi" overwrite="true"> 
    <fileset dir="./brands/${brand.prefix}/drawable-hdpi"/> 
    </copy> 
    <copy todir="bin/${app.pkg}/res/drawable-mdpi" overwrite="true"> 
    <fileset dir="./brands/${brand.prefix}/drawable-mdpi"/> 
    </copy> 
    <copy todir="bin/${app.pkg}/res/drawable-xhdpi" overwrite="true"> 
    <fileset dir="./brands/${brand.prefix}/drawable-xhdpi"/>  
    </copy> 

이 모든 것은 우리가 가지고있는 다양한 빌드 대상을 통과하는 build.xml의 for 루프에 들어 있습니다.

희망이 있습니다.

+0

하지만 난 단지 하나의 APK를 구축합니다. 나는 그들을 동적으로 변화시킬 수 있기를 원한다. 검은 피부를 선택하는 경우처럼이 스킨에 연결된 모든 이미지는 테마를 변경하기 전에 표시된 이미지 대신 표시됩니다. –

관련 문제