できるAndroid描ディレクトリを含むディレクトリのサブ?
-
21-08-2019 - |
質問
のAndroid SDK書類すべてに使用された例はこちら描/my_image xml syntaxに直接アドレスの画像、および、最適化処理を行っていres/描ディレクトリに私のプロジェクト.
私の場合は明示的に大丈夫な作サブディレクトリ内の描ンをクリックします。
例えば、私は以下のディレクトリにレイアウト:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
この参照画像のマグロのサラダ-サンドイッチとして@描/サンドイッチ/tunaOnRye
やさいので、階層平面に描ンをクリックします。
解決
いいえ、リソースメカニズムはそうはい、描画可能なディレクトリにサブフォルダをサポートしていません。 あなたが利用可能であること、画像のどれにつながる示した。
このディレクトリレイアウト
私自身の実験から、それはres/drawable
フォルダ内のその中の任意の項目、とサブフォルダを持つことが、リソースコンパイラが失敗する原因になるようです - 。正しく生成されることからR.java
ファイルを防止
他のヒント
私が使用している(と1のAndroid自体が好むようです)この問題を回避するには、本質的にスラッシュのためのアンダースコアを置換することであるので、あなたの構造は次のようになります:
sandwich_tunaOnRye.png
sandwich_hamAndSwiss.png
drink_coldOne.png
drink_hotTea.png
のアプローチは、あなたが質量をしなければならないだろう、あなたの命名で細心のようにあなたを必要とし、あなたはドリンクやサンドイッチは本当にすべて「food
」でなければならないことを決めた場合、それははるかに簡単に(ファイル自身を口論することはありません。単に)ディレクトリに移動するのではなく、名前を変更します。しかし、あなたのプログラミングロジックの複雑さは、のあまりにのひどくフォルダ構造と同等に比べて苦しむことはありません。
このような状況は確かに吸います。 Androidのは素晴らしいとひどいデザインの決定の混合バッグです。後者の部分は、すべての原因急いで淘汰取得するために我々は唯一の希望することができます)。
はい - 。それはしかし、あなたが資産フォルダを使用して、そこにサブディレクトリを持っているし、イメージをロードすることができます:)吸うんそのように
実際には、Androidのメーカーにそれが可能です。
:ののここを示すように、あなたはリソースを入れ子にしていることができます "ここに画像の説明を入力します。グループリソースのここのにするプラグインもあります。
資産フォルダを使用します。
サンプルコード:
InputStream is = null;
try {
is = this.getResources().getAssets().open("test/sample.png");
} catch (IOException e) {
;
}
image = BitmapFactory.decodeStream(is);
私は2つのアンダースコアの__
とファイル名を分離することにより、仮想サブフォルダを作成することを可能にするEclipseプラグインを書いてきました。プロジェクトは初期段階にあるが、それはあなたのIDEがクラッシュすることはありません心配しないでください。
の詳細は、プルリクエストをフォークし、気軽に、ここで見つけることができます:
https://github.com/kirill578/Android-Sorted-Res-Folder >
私はRファイルを生成するために使用することができるものにデザイナーが提供する組織的なディレクトリ構造を平らにする簡単なスクリプトを使用するようにしたい。
描画可能-hdpiに現在のパスを実行します:
#! /bin/bash
DIRS=`find * -type d`
for dir in ${DIRS} ; do
for file in `ls ${dir}` ; do
mv ${dir}/${file} ${dir}_${file};
done
rmdir ${dir};
done
のGradleとアンドロイドのスタジオで、あなたは、リソースを分離することを可能にする複数のソースディレクターを持つことができます。たとえばます:
android {
....
android.sourceSets {
main.res.srcDirs = ['src/main/extraresdirnamed_sandwiches', 'src/main/res']
}
....
}
ただし名前はあなたがまだなsandwiches_tunaOnRyeなどの名前を持っている必要がありますを意味している衝突してはなりませんが、あなたはあなたのサンドイッチのすべてのために別々のセクションを持つことができるようになります。
これは、あなた(自動車用に便利なactionbargeneratorなどのコンテンツを生成した)異なる構造内のリソースを保存することができます。
部分的に問題を回避する一つの方法は、APIレベルの接尾辞を使用することです。 私は同じAPK内の複数のサブプロジェクトを保持するためにRES /レイアウト-V1、RES /レイアウト-V2等を使用します。 このメカニズムは、すべてのリソースタイプに使用することができます。
あなたは解像度/レイアウト-V上のAPIレベルをターゲットにしている場合は、もちろん、これはのみ使用することができますか?あなたが使用しています。
また、Androidの1.5と1.6のバグのために気をつけてください。 APIレベルの接尾辞について Andoroidドキュメントを参照してください。
図書館システムの出現により、資産の大きなセットごとにライブラリを作成することは解決策になる可能性があります。
1つは、すべての資産の中に同じ名前の使用を避ける必要がありますが、ライブラリごとprefixスキームを使用することを支援すべきであるとして、まだ問題がある。
これは、フォルダを作成することができることのように単純ではないが、それは正気のものを維持するのに役立ちます...
このような状況の回避策があります:あなたは、デフォルトのresVector
フォルダと同じレベルにres
(たとえば)フォルダを作成することができます。そこがどんなdrawable-xxx
リソースフォルダを追加することができます:
resVector
-drawable
-layout
-color
その後はあなたが必要なのは、
追加することですsourceSets {
main.res.srcDirs += 'src/main/resVector'
}
あなたのbuild.gradle
ファイルに(android { }
内側)ます。
これは完璧な方法ではありません。あなたは、ディスプレイ<のhref =「http://vogella.blogspot.in/2014/01/how-to-add-or-import-image-in-drawable.html」のrel = "nofollowをされているのと同じ方法で実装する必要があります「>ここを。
また、あなたが使用することができ、コードをフォルダの下の画像を呼び出すことができます。
Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);
TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);
未鉱山はなく、あなたは、Android StudioとGradleのがとても簡単無しのプラグインに必要なほんの少しのビルドファイルの編集
システムを構築し使用している場合、この問題を探しているとき、私はこのスレッドを見つけましたGradle Androidのスタジオがこのようになっております(リンク).
この項の規定"の設定構造体"
sourceSets {
main {
java {
srcDir 'src/java'
}
resources {
srcDir 'src/resources'
}
}
}
メインにフォルダを作成します。 以下のような: 'res_notification_btn'
と木のフォルダを作成します。
「描画可能」や「レイアウト」などし、 'build.gradle' でこれを追加します。
sourceSets
{
main
{
res
{
srcDirs = ['src/main/res_notification_btn', 'src/main/res']
or
srcDir 'src/main/res_notification_btn'
}
}
}
#!/usr/bin/env ruby
# current dir should be drawable-hdpi/ etc
# nuke all symlinks
Dir.foreach('.') {|f|
File.delete(f) if File.symlink?(f)
}
# symlink all resources renaming with underscores
Dir.glob("**/*.png") {|f|
system "ln -s #{f} #{f.gsub('/', '_')}" if f.include?("/")
}
資産/ あなたは、生のアセットファイルを保存するためにそれを使用することができます。あなたはここに保存したファイルはそのままであるの.apkファイルにコンパイルされ、元のファイル名が保存されています。あなたは、URIを使用して、一般的なファイルシステムと同じように、このディレクトリをナビゲートしてAssetManagerを使用してバイトストリームとしてファイルを読み込むことができます。例えば、これは、テクスチャやゲームデータのための良い場所です。 http://developer.android.com/tools/projects/index.htmlする
のサブディレクトリが許可されていない、リソースのみを含まなければならない[-Z0-9 _]。
はありませんあなたは大文字、無スラッシュを持っています。
- ドローアブルを右クリック
- 「新規 ---> ディレクトリ」を選択します。
- ディレクトリ名を入力します。例えば:logo.png (デフォルトでは、この場所にはドローアブル フォルダーがすでに表示されています)
- 画像をコピーして、Drawable フォルダーに直接貼り付けます。貼り付け中に、リストから各画像の mdpi/xhdpi/xxhdpi などを選択するオプションが表示されます。適切なオプションを選択し、イメージの名前を入力します。必ずディレクトリ名と同じ名前、つまり logo.png を保持してください。
- 残りの画像についても同じことを行います。これらはすべて、logo.png メイン フォルダーの下に配置されます。