0

私は本当に面倒なアプリとフレーバーでは初めてです。アプリケーションには、すべて同じ背景色、描画可能なものなどの4,5種類の味があります。ロゴのみが異なります。フレーバーに応じてdrawableを自動的に変更する方法は?

今、私は全く違ったレイアウトで新しい味をつくる必要があります。背景色はグレーではなく黄色で、描画可能なイメージは白ではなく黒でなければなりません。問題は、私は100種類の白いイメージのようです。私はそれらを自動的に黒に変える方法はありますか? (デザイナーはそれらを再描画することができますし、何でも黒色にして、私はそのフレーバーのdrawableフォルダに置くことができます)または新しい味が使用されているかどうかをプログラムでチェックしてから、白い描画可能なすべてのウィジェットでsetDrawable(newBlackImage)それは、XMLレイアウトを使ってすべての描画可能ファイルが設定されているので、非常に複雑な方法です。

フレーバを使用していた方法は、リソースboolファイルを作成し、非表示/いくつかのものを表示...だから私はこれと同様の何かを行う必要がありますか?

これは私の味の一つのためのプロジェクト構造は次のようになります。

enter image description here

あなたが見ることができるように、すべての味が異なるだけでランチャーとログイン画面のアイコンがあります。また、それぞれに独自の配列、bool、文字列のリソースファイルがあります。しかし、それらのすべては、白いアイコンで同じレイアウトリソースとドロアブルを共有します。

+0

をあなたの代わりに、画像リソースのVectorDrawablesを使用している場合、彼らは別のファイルを使用せずに、プログラムで着色することができます。 –

+0

残念ながら、それらのすべては画像リソースです:/ Designerは私に黒いものを送ることができるので、問題ではないと私に言いました。主な問題は、私は白いアイコンの1つとしてイメージビューのsrcを設定するレイアウトがあるということです。私はちょうどプログラム的に黒いものに変更することを避けたい – joe

答えて

2

あなたはすでに正しい方法だと思います。あなたのgradleファイルにdrawableのグループごとに特定のフレーバーを作成することによって、特定のファイルを持つフレーバーのための描画可能なフォルダを作成するだけで済みます。

たとえば、フレーバー「黒」には、黒い背景の画像がすべて格納されるドロウアブルフォルダが必要です。

有効にするには、コードの一部を変更する必要がないように、すべてのフレーバ用のすべてのリソースが存在する必要があります。

あなたはここにクイックガイドを見つけることができます。 https://medium.com/@thiagolopessilva/the-handling-multiple-java-source-and-resources-using-flavors-on-gradle-18a4b581285b

+0

それは素晴らしい記事、tnx男です!プロジェクトの構造が間違っているかどうかを確認できるように、質問を更新しました。たぶん問題は、すべての私の白いアイコンがメインdrawableフォルダ内にあり、レイアウトのすべてがメインレイアウトフォルダ内にあるということです。各フレーバは異なるランチャアイコンしか持っていません。だから1つのレイアウトで何かを変更すると、すべてのフレーバーにその変更が適用されます。私があなたを正しく理解していれば、私が上に示したこの味の構造は、黒色のアイコンで描くことができるはずです。しかし、それらのアイコンを割り当てるためには、すべてのレイアウトを持つ必要がありますか? – joe

+0

たぶん、すべてのフレーバーが同じレイアウトを使用しているので、このフレーバードロワブルフォルダ内にすべての黒色のアイコンを作成し、それらを白と同じ名前にすることができますか?だからレイアウトはアンドロイド:src = "@ drawable/ic_add_white_24dp"フィールドを持つImageViewを持っているので、もし私のフレーバーがic_add_white_24dpをdrawableの中に持っていれば(それは黒くなります)、それを使用します。 – joe

+0

それは正しいです。 'main'のリソースがあなたのベースラインです。同じパス/名前を持つフレーバーフォルダ内のすべてのリソースは、アプリケーション内でそれらを上書きします。 –

関連する問題