スキンとして使用する2つのテーマと写真を含むアプリケーションを開発しています。コードでアクティビティ全体のテーマを設定できます。私の問題は、写真に関してスキンを正しく分離する方法がわからないことです。たとえば、私は2つのテーマ(白黒)を持っており、これらのテーマに固有の写真のセットを持っています。コードから肌のテーマと画像の両方を設定できるように、画像を分離するにはどうすればよいですか?
1 に答える
ごめん。私は質問を誤解しました。コメントが自然な流れになるように、以前の回答を以下に残しました。
この場合、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 ループに含まれています。
それが役立つことを願っています。