0

スキンとして使用する2つのテーマと写真を含むアプリケーションを開発しています。コードでアクティビティ全体のテーマを設定できます。私の問題は、写真に関してスキンを正しく分離する方法がわからないことです。たとえば、私は2つのテーマ(白黒)を持っており、これらのテーマに固有の写真のセットを持っています。コードから肌のテーマと画像の両方を設定できるように、画像を分離するにはどうすればよいですか?

4

1 に答える 1

2

ごめん。私は質問を誤解しました。コメントが自然な流れになるように、以前の回答を以下に残しました。

この場合、Branding.java クラスがあります。このクラスはブランド名 (あなたの場合はテーマ) を受け取り、そのテーマに固有のさまざまな値と文字列を生成します。たとえば、Splash イメージに dark_theme_splash.png と light_theme_splash.png という名前を付けます。そのドローアブルをロードするときに 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 つの異なるテーマを持つアプリを管理しています。劇的に異なるものもあります。私がこれまでに見つけた最善の解決策は、2 つの部分に分けられます。

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 ループに含まれています。

それが役立つことを願っています。

于 2012-06-28T15:48:34.613 に答える