可以安卓绘制目录,含有子目录?
-
21-08-2019 - |
题
在SDK文件,所有的例子使用与@冲/my_image xml语法直接地址图像存储在res/绘制目录在我的项目。
我想知道如果这是明确不好创建一个子目录内的图片目录。
例如,如果我有以下目录的布局:
res/drawable
-- sandwiches
-- tunaOnRye.png
-- hamAndSwiss.png
-- drinks
-- coldOne.png
-- hotTea.png
我可以参考图像的金枪鱼沙拉三明治作为@冲/三明治/tunaOnRye
或者我必须保持层次平在绘制目录。
解决方案
没有,资源机制不支持子文件夹在绘制目录,所以是 - 你需要保持该层次结构扁平
在目录布局你表现出会导致没有任何图像是可用的。
从我自己的实验似乎有在任何项目中,res/drawable
文件夹中的子文件夹,将导致资源编译器失败 - 防止R.java
文件被正确生成
其他提示
解决方法我使用(和一个Android的本身似乎有利于)是基本上代替下划线的斜杠,所以你的结构将是这个样子:
sandwich_tunaOnRye.png
sandwich_hamAndSwiss.png
drink_coldOne.png
drink_hotTea.png
这种方法需要你在你的命名细致,不使它更容易缠斗文件本身(如果你决定,饮料和三明治真的应该都是“food
”,你必须做一个质量重命名,而不是简单地将其移动到该目录);但你的编程逻辑的复杂性不吃亏的太的严重相比,文件夹结构等效。
此情况确实吸。 Android是精彩而可怕的设计决定鱼龙混杂。我们只能希望后者部分获得一切应有的急速淘汰:)
是 - 它吸:)不过你可以使用的资源文件夹,并在那里有子目录,并加载图像这样
使用资产文件夹。
示例代码:
InputStream is = null;
try {
is = this.getResources().getAssets().open("test/sample.png");
} catch (IOException e) {
;
}
image = BitmapFactory.decodeStream(is);
我已经写了一个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 级别后缀。我使用 res/layout-v1、res/layout-v2 等在同一个 apk 中保存多个子项目。该机制可用于所有资源类型。
显然,只有当您的目标 API 级别高于 res/layout-v 时才可以使用此方法?您正在使用。
另外,请注意 Android 1.5 和 1.6 中的错误。请参阅有关 API 级别后缀的 Android 文档.
使用库系统的出现,产生每大组资产的文库可能是一个解决方案。
这仍是个问题作为一个必须避免使用全部资产中的名称相同,但使用每个库的前缀方案应与帮助。
这并不是因为能够创建文件夹一样简单,但是可以帮助保持理智的事情...
有对于这种情况一种解决方法:可以在同一水平上为默认resVector
文件夹中创建res
(例如)文件夹。在那里,你可以添加任何drawable-xxx
资源文件夹有:
resVector
-drawable
-layout
-color
在所有你需要的是添加
sourceSets {
main.res.srcDirs += 'src/main/resVector'
}
到您build.gradle
文件(内android { }
)。
这不是完美的方法。你必须执行相同的方式显示 在这里,.
你也可以叫下的图像文件夹的通过代码可以使用
Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);
TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);
不是我的,但我发现这个线程在寻找这个问题的时候,如果你使用的是Android Studio和摇篮构建系统,它很容易无插件需要一点点构建文件编辑
摇篮与机器人工作室可能做这种方式(链接).
它在该段的"配置结构"
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
子目录是不允许的,资源必须只包含[A-Z0-9 _]。
没有你有大写字母,并没有斜杠。
- 右键单击可绘制对象
- 选择新建--->目录
- 输入目录名称。例如:logo.png(默认位置已经显示drawable文件夹)
- 将图像直接复制并粘贴到可绘制文件夹中。粘贴时,您可以选择为列表中的每个图像选择 mdpi/xhdpi/xxhdpi 等。选择适当的选项并输入图像的名称。确保与目录名称保持相同的名称,即 logo.png
- 对其余图像执行相同操作。所有这些都将放置在 logo.png 主文件夹下。