Android studio src / res / layout子文件夹错误

时间:2017-06-28 08:28:12

标签: android android-studio gradle subdirectory

StackOverflow Answers

我读了那篇文章并试图在app / src / main / res / layout /

制作子文件夹

我想我做了那个答案中提到的所有事情。

在我的gradle中:

apply plugin: 
apply plugin: 
apply plugin:
apply plugin: 

android {
    // something
    sourceSets {
    main {
        res.srcDirs = getLayoutList("app/src/main/res/layout/")
    }
}
def getLayoutList(path) {
File file = new File(path)
def throwAway = file.path.split("/")[0]
def newPath = file.path.substring(throwAway.length() + 1)
def array = file.list().collect {
    "${newPath}/${it}"
}
def res="src/main/res";
array.push(res);
return array
}

dependencies { ... }

我的目录层次结构模型(项目)

Test
-- .gradle
-- .idea
-- app
  -- build
  -- libs
  -- src
    -- androidTest
    -- main
      -- assets
      -- java
      -- res
        -- layout
          -- about_login
          -- timetable
          -- activity_main.xml
      -- AndroidManifest.xml
    -- test
-- build
-- gradle
-- .gitignore
-- ... // Lot more setting files

但是当我同步我的gradle时,错误出现并说,索引错误

  

def newPath = file.path.substring(throwAway.length()+ 1)

在那条线上。请帮帮我。

为什么这是不同的问题?

第一。许多人在他们自己的电脑上工作,但我不能 第2位。我认为String.substring()之间有关系 3。我无法解决这个问题。

1 个答案:

答案 0 :(得分:3)

您的项目结构中存在一个简单的错误。您需要创建布局目录 布局。所以它应该是:

app/src/main/res/layouts/

然后在您的子文件夹中,您需要创建以创建布局目录。这应该是您的布局文件所在的位置。例如,如果您要在子文件夹 about_login 中创建login_activity.xml,则需要创建以下目录:

app/src/main/res/layouts/about_login/layout

因此,login_activity.xml路径将是:

app/src/main/res/layouts/about_login/layout/login_activity.xml

然后,在应用 build.gradle 中,您应该添加以下内容:

sourceSets {
    main {
      res.srcDirs =
          [
              'src/main/res', // Try removing this
              'src/main/res/layouts',
              'src/main/res/layouts/about_login',
          ]
    }
}

每次需要创建子文件夹时,还需要创建 layout 目录并在布局目录中添加XML布局文件。

然后您的目录层次应该是这样的:

Test
-- .gradle
-- .idea
-- app
  -- build
  -- libs
  -- src
    -- androidTest
    -- main
      -- assets
      -- java
      -- res
        -- layouts
          -- about_login
            -- layout
              -- login_activity.xml
          -- activity_main.xml
      -- AndroidManifest.xml
    -- test
-- build
-- gradle

您可以在下面评论以下代码,因为我们不需要它:

def getLayoutList(path) {
File file = new File(path)
def throwAway = file.path.split("/")[0]
def newPath = file.path.substring(throwAway.length() + 1)
def array = file.list().collect {
    "${newPath}/${it}"
}
def res="src/main/res";
array.push(res);
return array
}