在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是精彩而可怕的设计决定鱼龙混杂。我们只能希望后者部分获得一切应有的急速淘汰:)

是 - 它吸:)不过你可以使用的资源文件夹,并在那里有子目录,并加载图像这样

实际上,在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和摇篮构建系统,它很容易无插件需要一点点构建文件编辑

https://stackoverflow.com/a/22426467/618419

摇篮与机器人工作室可能做这种方式(链接).

它在该段的"配置结构"

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 _]。

没有你有大写字母,并没有斜杠。

  1. 右键单击可绘制对象
  2. 选择新建--->目录
  3. 输入目录名称。例如:logo.png(默认位置已经显示drawable文件夹)
  4. 将图像直接复制并粘贴到可绘制文件夹中。粘贴时,您可以选择为列表中的每个图像选择 mdpi/xhdpi/xxhdpi 等。选择适当的选项并输入图像的名称。确保与目录名称保持相同的名称,即 logo.png
  5. 对其余图像执行相同操作。所有这些都将放置在 logo.png 主文件夹下。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top