Android 레이아웃 폴더에 하위 폴더가 포함될 수 있습니까?


551

지금은 모든 XML 레이아웃 파일을 res/layout폴더에 저장하므로 소규모 프로젝트를 관리하는 것이 가능하고 간단하지만 크고 무거운 프로젝트가있는 경우 계층 구조와 하위 폴더가 있어야합니다. 레이아웃 폴더

예를 들어

layout
-- layout_personal
   -- personal_detail.xml
   -- personal_other.xml
--layout_address
  -- address1.xml
  -- address2.xml

같은 방법으로 우리는 큰 응용 프로그램을위한 하위 폴더를 갖고 싶습니다. 안드로이드 프로젝트 내에서 그렇게 할 수있는 방법이 있습니까?

레이아웃 폴더 안에 layout-personal 및 layout_address 하위 폴더를 만들 수는 있지만 R.layout ._______을 사용하여 XML 레이아웃 파일에 액세스 할 때 해당 시점에 XML 레이아웃 팝업이 없습니다. 메뉴.



이 링크가 자세히 도움이 될 것 같습니다. blog.mindorks.com/…
Dilip Poudel

답변:


475

gradle 로이 작업을 수행 할 수 있습니다. 방법을 보여주는 데모 프로젝트 를 만들었습니다 .

트릭은 gradle의 여러 리소스 폴더 병합 기능을 사용 하고 res 폴더와 sourceSets 블록의 중첩 하위 폴더를 설정하는 것입니다.

문제는 해당 폴더의 하위 리소스 폴더를 선언하기 전에 컨테이너 리소스 폴더를 선언 할 수 없다는 것입니다.

아래는 데모의 build.gradle 파일에있는 sourceSets 블록입니다. 하위 폴더가 먼저 선언되어 있습니다.

sourceSets {
    main {
        res.srcDirs =
        [
                'src/main/res/layouts/layouts_category2',
                'src/main/res/layouts',
                'src/main/res'
        ]
    }
}

중첩 된 리소스 사진

또한 실제 리소스 파일의 직접 부모 (pngs, xml 레이아웃 등)는 여전히 사양 과 일치해야합니다 .


6
드로어 블 폴더 로이 작업을 수행 할 수 있습니까? 선언 순서를 고려하더라도 운이 없었지만 방금 시도했습니다.
trevor-e

7
좋은! 리소스 폴더 를 병합 하는 gradle의 기능 만 실제로 사용한다는 점을 기억하십시오 .
eski

5
폴더의 파일 이름은 여전히 ​​고유해야하며 코드에서 예를 들어 또는 폴더 R.layout.list_item에서 오는 것임을 알고 있어야 하므로 플랫 명명이 여전히 적용됩니다. moviescinemas
TWiStErRob

5
불행히도 build:gradle:0.14.4and 와는 작동하지 않습니다 buildToolsVersion "21.1.1".
Kamil Lelonek

32
이 작품은, 그러나 대답은하지 비참하게 당신이 요구 사항을 추가하는 것이 각 하위 폴더가있는 것을 설명하기에 부적절한 만 "레이아웃"이라고 할 수있다 그것의 하위 폴더 내부를, 및 레이아웃 파일 모두의 내부를 이동해야 두 번째 하위 폴더. 이를 해결하기 위해 수십 개의 의견을 읽는 것이 이상적이지 않습니다. 그리고 여전히 찾고있는 사람에게는 여분의 "레이아웃"하위 폴더를 설정하는 것이 URI is not registered문제 에 대한 해결책입니다.
aroth

233

대답은 '아니오.

이 책 Pro Android 2에 대해 다음 과 같은주의를 기울이고 싶습니다 .

또한 리소스에 관한 몇 가지 제약 조건에 주목할 가치가 있습니다. 첫째, Android는 res의 사전 정의 된 폴더 내에서 파일의 선형 목록 만 지원합니다. 예를 들어 레이아웃 폴더 아래의 중첩 폴더 (또는 res 아래의 다른 폴더)는 지원하지 않습니다 .

둘째, 자산 폴더와 원시 폴더 간의 해상도가 약간 비슷합니다. 두 폴더 모두 원시 파일을 포함 할 수 있지만, 원시 내의 파일은 리소스로 간주되며 자산 내의 파일은 그렇지 않습니다.

자산 폴더 의 내용은 리소스로 간주되지 않으므로 폴더와 파일임의 계층을 폴더 안에 넣을 수 있습니다 .


3
다음으로 가장 좋은 희망은 파일 이름 접두사를 기반으로 파일을 축소 할 수있는 Eclipse 또는 IntelliJ 플러그인입니다.
Jerry Brady

15
@Justin은 gradle에 게시 한 솔루션을 확인하십시오.
eski

파일을 분류하려는대로 파일 이름을 지정하는 것이 하나의 해결책 일 수 있으므로 하위 폴더에있는 것처럼 보입니다. 이름의 시작 부분에 "하위 폴더 태그"를 추가합니다. 예를 들어. 모든 활동은 "activity_activityname.xml"이고 하위 활동은 "activity_activityname_childactivity.xml"등이 될 수 있습니다. 다른 파일은 "other_filename.xml"입니다. 그것이 혼란을 피하기 위해하는 일입니다. 젠장, 누군가 날 이겼어. 3 년이 지났을 때 .. <나의 나쁜, 그것을 보지 못했다.
Vedavyas Bhat

1
여기서 raw리소스 로 고려 하면 밀도 / 방향 / 버전 / 등에 의존적 인 스트라이핑을 얻는 반면 assets수동으로 수행해야합니다.
TWiStErRob

1
이 답변을 Android 주류를 파악하는 것에 대한 논쟁으로 선택했습니다.
Zon

77

난 그냥 문제가있는 사람들을위한 에스 키의 환상적인 답변을 추가하고 싶었다. (참고 : 이것은 안타깝게도 'android'보기가 아닌 '프로젝트'보기 내부의 별도 디렉토리처럼 작동하고 보입니다.)

다음과 같이 테스트했습니다. BuildToolsVersion = 23.0.0 gradle 1.2.3 및 1.3.0

이것이 내가 이미 구축 한 프로젝트로 작업하게하는 방법입니다.

  1. 모든 XML 파일을 레이아웃 디렉토리에서 복사하여 데스크탑의 디렉토리 또는 백업용 디렉토리에 저장하십시오.
  2. 전체 레이아웃 디렉토리를 삭제하십시오 (1 단계에서 모든 것을 백업했는지 확인하십시오 !!!)
  3. res 디렉토리를 마우스 오른쪽 단추로 클릭하고 새로 작성> 디렉토리를 선택하십시오.
  4. 이 새 디렉토리의 이름을 "레이아웃"으로 지정하십시오. (이것은 원하는 것이 될 수 있지만 나중에 오는 '조각'디렉토리 또는 '활동'디렉토리는 아닙니다).
  5. 새 "레이아웃"디렉토리를 마우스 오른쪽 단추로 클릭하고 새로 작성> 디렉토리를 선택하십시오. (이것은 예를 들어 'fragments'및 'activities'와 같은 XML 파일 유형의 이름입니다).
  6. 'fragment'또는 'activities'디렉토리를 마우스 오른쪽 단추로 클릭하고 (참고 :이 예는 내가 사용하고있는 'fragment'또는 'activities'일 필요는 없음) 다시 new> directory를 다시 선택하고이 디렉토리의 이름을 지정하십시오. "나열한 것". (참고 : 반드시 '레이아웃'이라고해야합니다 !!! 매우 중요합니다).
  7. 데스크탑에서 만든 백업의 새 '레이아웃'디렉토리에 원하는 XML 파일을 넣습니다.
  8. 원하는 수의 사용자 정의 디렉토리에 대해 5-7 단계를 반복하십시오.
  9. 이 작업이 완료되면 모듈 gradle.build 파일로 이동하여 다음과 같이 sourceSets 정의를 만듭니다 ... ( 'src / main / res / layouts'& 'src / main / res'가 항상 맨 아래 두 개인 지 확인하십시오 !! !! 아래 그림처럼).

    sourceSets {
        main {
            res.srcDirs =
                    [
                            'src/main/res/layouts/activities',
                            'src/main/res/layouts/fragments',
                            'src/main/res/layouts/content',
                            'src/main/res/layouts',
                            'src/main/res'
                    ]
        }
    }
  10. 이익 $$$$

그러나 진지하게 .. 이것이 내가 작동하는 방법입니다. 궁금한 점이 있으면 알려주세요. 도와 드리겠습니다.

그림은 말보다 가치가 있습니다.

디렉토리 구조


1
layout-v21? 와 같은 레이아웃 디렉토리는 어떻습니까?
Akshay Chordiya

4
나는 그것을 테스트하지 않았지만 레이아웃 폴더 옆에 layout-v21 폴더를 생성한다고 상상할 수 있습니다.
hitch.united

gradle 2.0.0 및 buildTools 버전 23.0.2에서 작동합니다! 참고 설정 값이라고 'src/main/res/layouts/content'하고,이 구성의 경로는'src/main/res/layouts/content/layout'
cwhsu


2
운없이 잠시 동안 검색 한이 방법은 나를 위해 일한 유일한 솔루션입니다. 이미지와 같은 자세한 답변을 게시 해 주셔서 감사합니다!
Machine Tribe

53

불가능하지만 레이아웃 폴더는 이름별로 정렬됩니다. 따라서 레이아웃 파일 이름 앞에 패키지 이름을 붙입니다. 예를 들어 "구매"와 "재생"이라는 두 가지 패키지의 경우 :

buying_bought_tracks.xml
buying_buy_tracks.xml
playing_edit_playlist.xml
playing_play_playlist.xml
playing_show_playlists.xml

20

내가 사용 그룹화 Android 파일 정말 당신이 하위 폴더를 만들 수 없습니다 안드로이드 Studio.It에 대한 플러그인을하지만, 서로 다른 폴더에있는 그대로 당신의 파일과 자원을 표시 할 수 있습니다. 이것이 바로 내가 원하는 것입니다.

"Android 파일 그룹화"플러그인을 설치하면

윈도우 :

Android Studio-> 파일-> 설정-> 플러그인.

맥:

Android Studio-> Android Studio 탭 (왼쪽 상단)-> 기본 설정-> 플러그인-> JetBrains 플러그인 설치 ..

Mac의 경우 테스트 할 수 있었고 플러그인을 검색 할 수 없었습니다. 그래서 여기 에서 플러그인을 다운로드 Install plugin from disk하고 위의 설정에서 옵션을 사용했습니다 .


또한 해당 플러그인의 링크를 공유하십시오!
Paresh Mayani

끝난. 어쨌든 당신은 항상 안드로이드 스튜디오에서 "Android 파일 그룹화"를 검색 할 수 있습니다-> 파일-> 설정-> 플러그인
Sharpe

3
플러그인은 "Android"보기에서는 작동하지 않고 "프로젝트"보기에서만 작동합니다. :
Hugo Gresse

18

이제 Android Studio 및 Gradle을 사용하면 프로젝트에 여러 리소스 폴더를 가질 수 있습니다. 레이아웃 파일뿐만 아니라 모든 종류의 리소스를 구성 할 수 있습니다.

정확히 하위 폴더는 아니지만 응용 프로그램의 일부를 분리 할 수 ​​있습니다.

구성은 다음과 같습니다.

sourceSets {
    main {
        res.srcDirs = ['src/main/res', 'src/main/res2']
    }
}

설명서를 확인하십시오 .


2
이 설정에서 레이아웃을 변경할 때마다 항상 clean앱에 반영 되는 것을보아야했습니다.
Pawan Kumar

16

이 문제에 대한 가장 우아한 해결책 (하위 폴더가 허용되지 않음)은 파일 이름 앞에 폴더 이름을 추가하는 것입니다. 예를 들어, Activity, Fragment 또는 "places"라는 일반 뷰에 대한 레이아웃이 많은 경우에는 places_my_layout_name을 앞에 추가해야합니다. 적어도 이것은 IDE 내에서 더 쉽게 찾을 수 있도록 구성하는 문제를 해결합니다. 가장 멋진 솔루션은 아니지만 아무것도 아닌 것보다 낫습니다.


16

작은 문제

이 질문에 대한 최상위 답변 을 따르면 하위 폴더를 얻을 수 있습니다.

그러나 프로젝트가 커지면 하위 폴더가 많이 생깁니다.

sourceSets {
    main {
        res.srcDirs =
            [
                    'src/main/res/layouts/somethingA',
                    'src/main/res/layouts/somethingB',
                    'src/main/res/layouts/somethingC',
                    'src/main/res/layouts/somethingD',
                    'src/main/res/layouts/somethingE',
                    'src/main/res/layouts/somethingF',
                    'src/main/res/layouts/somethingG',
                    'src/main/res/layouts/somethingH',
                    'src/main/res/layouts/...many more',
                    'src/main/res'
            ]
    }
}

큰 문제는 아니지만 :

  • 목록이 너무 길어질수록 예쁘지 않습니다.
  • app/build.gradle새 폴더를 추가 할 때마다 변경해야 합니다.

개량

그래서 모든 중첩 폴더를 가져 오는 간단한 Groovy 메소드를 작성했습니다.

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}"
    }
    array.push("src/main/res");
    return array
}

이 방법을의 android {...}블록 외부에 붙여 넣으십시오 app/build.gradle.


사용하는 방법

이와 같은 구조의 경우 :

<project root>
├── app <---------- TAKE NOTE
├── build
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle

다음과 같이 사용하십시오.

android {
    sourceSets {
        main {
            res.srcDirs = getLayoutList("app/src/main/res/layouts/")
        }
    }
}

다음과 같은 구조가 있다면 :

<project root>
├── my_special_app_name <---------- TAKE NOTE
├── build
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle

다음과 같이 사용하십시오.

android {
    sourceSets {
        main {
            res.srcDirs = getLayoutList("my_special_app_name/src/main/res/layouts/")
        }
    }
}

설명

getLayoutList()소요 a relative path인수로. 는 relative path프로젝트의 루트에 상대적입니다. 따라서 우리가 입력 "app/src/main/res/layouts/"하면 모든 하위 폴더의 이름을 배열로 반환합니다.

            [
                    'src/main/res/layouts/somethingA',
                    'src/main/res/layouts/somethingB',
                    'src/main/res/layouts/somethingC',
                    'src/main/res/layouts/somethingD',
                    'src/main/res/layouts/somethingE',
                    'src/main/res/layouts/somethingF',
                    'src/main/res/layouts/somethingG',
                    'src/main/res/layouts/somethingH',
                    'src/main/res/layouts/...many more',
                    'src/main/res'
            ]

이해를 돕기위한 주석이있는 스크립트는 다음과 같습니다.

def getLayoutList(path) {
    // let's say path = "app/src/main/res/layouts/
    File file = new File(path)

    def throwAway = file.path.split("/")[0]
    // throwAway = 'app'

    def newPath = file.path.substring(throwAway.length() + 1) // +1 is for '/'
    // newPath = src/main/res/layouts/

    def array = file.list().collect {
        // println "filename: ${it}" // uncomment for debugging
        "${newPath}/${it}"
    }

    array.push("src/main/res");
    // println "result: ${array}" // uncomment for debugging

    return array
}

그것이 도움이되기를 바랍니다!


나는 당신의 접근 방식을 사용했지만 어떻게 활동에 사용합니까? admin이라는 레이아웃 폴더에 하위 폴더를 만들었고 활동 setContentView(R.layout.Admin.admin_home .)중이고 admin.admin_home을 사용할 때 admin_home 레이아웃 이 있습니다.
Asmaa Rashad

처럼 정상적으로 사용할 수 있어야합니다 R.layout.admin_home. 스크립트가 자동으로 이름을 선택할 수 있어야합니다. 제대로 작동하는지 알려주세요.
저는 개구리 드래곤입니다.

잘 작동하지만 푸시가 오류가 있기 때문에이 줄 array.push("src/main/res");을 변경 한 후 def res="src/main/res"; array.push(res);푸시 문자열이 아닌 문자열을 원합니다. 내가 아닌 다른 사람 이이 오류를 발견하면 편집 할 수 있습니다.
Asmaa Rashad

1
하위 폴더의 레이아웃은 Android 네임 스페이스를 확인할 수 없습니다. 어떤 아이디어?
재규어

해당 줄을 주석 해제 // uncomment for debugging한 다음 출력 src/main/res/layouts/<your_layout_files>이 올바르게 감지되는지 확인할 수 있습니까?
저는 개구리 드래곤입니다.

15

이제 " Android File Grouping " 이라는 JetBrains 플러그인으로 쉽게 할 수 있습니다.

이 링크를 확인하십시오

안드로이드 파일 그룹화

여기에 이미지 설명을 입력하십시오


간단한 이름 규칙으로 그룹을 구성하기 때문에 정답으로 표시해야합니다. gradle을 변경하거나 앱의 기본 디렉토리 구조를 변경할 필요가 없습니다. 모든 레이아웃은 여전히 ​​레이아웃 폴더에 남아 있지만 그룹화되어 있습니다Android Studio
Alireza Fattahi

1
안드로이드보기에서 작동하지 않기 때문에 허용되는 대답이 아니어야합니다 .... (그러나 나는 아이디어를 좋아합니다 ^^)
Appyx

이것은 안드로이드의 마지막 마지막 버전에서는 작동하지 않습니다 ... 업데이트 된 버전입니까?
user3053247

7

내가 한 방법은 프로젝트의 실제 res 폴더와 동일한 수준에서 별도의 res 폴더를 만든 다음 앱 build.gradle에서 사용할 수 있습니다.

android {
    //other stuff

    sourceSets {
        main.res.srcDirs = ['src/main/res', file('src/main/layouts').listFiles()]
    }
}

폴더 구조 예

새 res 폴더의 각 하위 폴더는 앱의 각 특정 화면이나 항목과 관련이있을 수 있으며 각 폴더에는 자체 layout/ drawable/ values등이있어 구성되어 있으며 gradle 파일을 수동으로 업데이트 할 필요가 없습니다. 답변이 필요합니다 (새 리소스 폴더를 추가 할 때마다 gradle을 동기화하여 알 수 있도록하고 xml 파일을 추가하기 전에 관련 하위 폴더를 추가하십시오).



3

리눅스 나 맥 박스에서 개발하고 있다면, 해결 방법은 레이아웃 파일에 대한 심볼릭 링크를 포함하는 하위 폴더를 만드는 것입니다. ln 명령을 -s와 함께 사용하십시오.

ln -s PATH_TO_YOUR_FILE

이것의 문제는 Layout 폴더에 여전히 모든 .xml 파일이 포함되어 있다는 것입니다. 그러나 하위 폴더를 사용하여 선택할 수 있습니다. 당신이 갖고 싶은 것에 가장 가까운 것입니다.

Vista 이상을 사용하는 경우 Windows에서도 작동 할 수 있다고 읽었습니다. 이 mklink명령이 있습니다. 그냥 구글, 그것을 직접 사용하지 않았습니다.

또 다른 문제는 파일을 열고 파일을 다시 열려고하면 플러그인에서 NULL 포인터 예외가 발생한다는 것입니다. 그러나 끊지 않습니다.


1
심볼릭 링크를 사용하면 구성 요소를 서로 다른 하위 디렉토리로 분리하여 스토리지를 모듈화하려는 목적을 포기할 수 있습니다. Gradle은 추가 리소스 디렉토리의 사양을 허용합니다.
RichieHH

3

여러 리소스 세트에 대한 모든 제안이 작동 할 수 있지만 문제는 Android Studio Gradle 플러그인의 현재 논리가 리소스 파일이 중첩 된 리소스 세트에 대해 변경된 후에는 리소스 파일을 업데이트하지 않는다는 것입니다. 현재 구현에서는 startsWith ()를 사용하여 자원 디렉토리를 검사하려고하므로 중첩 된 디렉토리 구조 (예 : src / main / res / layout / layouts 및 src / main / res / layout / layouts_category2)는 src / main / res를 선택합니다. / layout / layouts는 일관되고 실제로 변경 사항을 업데이트하지 않습니다. 결과적으로 매번 프로젝트를 다시 빌드 / 청소해야합니다.

https://android-review.googlesource.com/#/c/157971/ 에서 문제를 해결하기 위해 패치를 제출했습니다 .


AS는 XML 파일의 변경 사항을 언급하지 않는다는 것에 동의합니다. 그러나 해결책은 무엇입니까? stackoverflow.com/questions/32317822/… 을 시도 할 것 입니다.
CoolMind

3

@eski의 가장 좋은 대답은 좋지만 코드는 우아하지 않으므로 일반적인 용도로 gradle에 그루비 스크립트를 작성했습니다. 모든 빌드 유형 및 제품 특징에 적용되며 레이아웃에 사용할 수있을뿐만 아니라 드로어 블과 같은 다른 리소스 유형에 대한 하위 폴더를 추가 할 수도 있습니다. 코드는 다음과 같습니다 ( android프로젝트 레벨 gradle 파일 블록에 넣습니다 ).

sourceSets.each {
    def rootResDir = it.res.srcDirs[0]
    def getSubDirs = { dirName ->
        def layoutsDir = new File(rootResDir, dirName)
        def subLayoutDirs = []
        if (layoutsDir.exists()) {
            layoutsDir.eachDir {
                subLayoutDirs.add it
            }
        }
        return subLayoutDirs
    }
    def resDirs = [
            "anims",
            "colors",
            "drawables",
            "drawables-hdpi",
            "drawables-mdpi",
            "drawables-xhdpi",
            "drawables-xxhdpi",
            "layouts",
            "valuess",
    ]
    def srcDirs = resDirs.collect {
        getSubDirs(it)
    }
    it.res.srcDirs = [srcDirs, rootResDir]
}

실제로하는 방법?

예를 들어, 나는라는 이름의 하위 폴더를 만들려면 activity를 들어 layout, 임의의 이름으로 문자열을 추가 resDirs같은 변수 layouts다음 레이아웃 XML 파일에 넣어되어야한다 res\layouts\activity\layout\xxx.xml.

나는라는 이름의 하위 폴더를 만들려면 selectors를 들어 drawable, 임의의 이름으로 문자열을 추가 resDirs같은 변수 drawables후 당김 XML 파일에 넣어되어야한다 res\drawables\selectors\drawable\xxx.xml.

폴더 이름은 같은 layoutsdrawables에 정의 된 resDirs변수, 어떤 문자열이 될 수 있습니다. 폴더와 같이 activity또는 폴더 selectors와 같은 것으로 귀하에 의해 생성 된 모든 하위 res폴더. 따라서 selectors폴더에서 drawable폴더를 추가로 생성 하고 xml 파일을 drawable폴더에 넣어야 합니다. 그러면 gradle이 xml 파일을 정상적으로 그릴 수있는 것으로 인식 할 수 있습니다.


이것은 정답으로 간주되어야합니다! 간단하고 완벽하게 작동합니다!
Gláucio Leonardo Sant'ana

2

승인 된 답변에서 방법을 사용하고 조금 향상시키고 싶다면 다음과 같이 gradle 설정을 변경하십시오.

    sourceSets {
    main {
        res.srcDirs = [
            file("src/main/res/layouts/").listFiles(),
            "src/main/res/layouts",
            "src/main/res"
        ]
    }
}

따라서 더 많은 폴더와 레이아웃을 추가하는 경우 여기로 돌아와서 소스 폴더의 긴 목록을 추가 할 필요가 없으므로 gradle이 모든 폴더를 가져 오도록합니다.


1
  • 1 단계 : 레이아웃을 마우스 오른쪽 버튼으로 클릭-탐색기에 표시
  • 2 단계 : 레이아웃 폴더를 열고 하위 폴더를 직접 만듭니다 : layout_1, layout_2 ...
  • 3 단계 : layout_1 열기 폴더 레이아웃 생성 (참고 : 필수 이름은 레이아웃), layout_2 폴더 생성 레이아웃 하위 디렉토리 열기 (참고 : 필수 이름은 레이아웃) ...
  • 4 단계 : XML 파일을 layout_1 및 layout_2의 레이아웃 하위 디렉토리로 복사
  • 5 단계 : buid.grade (모듈 앱)에서 코드를 실행하고 지금 동기화를 누릅니다.

sourceSets {
    main {
        res.srcDirs =
            [
                'src / main / res / layout / layout_1'
                'src / main / res / layout / layout_2',
                'src / main / res'
            ]
    }
}
  • 6 단계 : 요약 : 위의 모든 단계는 폴더를 클러스터링하고 '프로젝트'모드로만 표시하는 반면 'android'모드는 정상적으로 표시됩니다.
  • 따라서 접두사 이름 지정이 폴더 클러스터링만큼 효과적이라고 생각합니다.

Project모드 주셔서 감사 합니다. 하위 폴더가 사라진 곳을 이해할 수 없었습니다 ( Android모드).
CoolMind

0

짧은 대답은 '아니요'입니다. 그러나 분명히 여러 res폴더를 가질 수 있습니다 . 그것은 폴더에 대한 하위 폴더를 가질 수있는 한 가깝습니다 layout. 방법은 다음과 같습니다 .


1
허용 된 답변을 확인하십시오. 나는 개인적으로 시도하지 않았지만 확인하고 업데이트 할 수 있다면 도움이 될 것입니다!
Paresh Mayani

0

최고의 답변에는 몇 가지 단점이 있습니다. AS는 새 레이아웃 경로를 추가해야합니다. AS는 res\layouts대신 새 리소스를 폴더에 배치합니다 res\values.

몇 가지 답변을 결합하여 비슷한 것을 썼습니다.

sourceSets {
    main {
        res.srcDirs =
                [
                        'src/main/res',
                        file("src/main/res/layouts/").listFiles(),
                        'src/main/res/layouts'
                ]
    }
}

이 기사로 폴더를 만들었습니다 : http://alexzh.com/tutorials/how-to-store-layouts-in-different-folders-in-android-project/ . 하위 폴더를 만들려면이 메뉴를 사용하십시오 : 새로 만들기> 폴더> 폴더 해상도.

최신 정보

몇 주 후에 나는 안드로이드 스튜디오가 리소스의 변화를 알아 차리지 못하는 것을 발견했다 . 그래서 이상한 버그가 나타납니다. 예를 들어, 레이아웃에는 계속 오래된 크기와 여백이 표시됩니다. 때때로 AS는 새로운 XML 파일을 찾지 못합니다 (특히 런타임 중에). 때로는 view ids (다른 XML 파일에 대한 참조)를 혼합 합니다. 종종 Build > Clean Project또는 을 눌러야 Build > Rebuild Project합니다. Android Studio에서 XML 레이아웃 파일을 변경 한 후 재 빌드 필요를 읽으십시오 .


귀하의 의견 '이 기사와 함께 폴더를 만들었습니다 (첨부 링크)'는 여기에 해결책을 제공 할 수있는 적절한 방법이 아닙니다. 귀하의 답변은 모호합니다. 지침을 남기고 저자에게 링크를 표시 할 수 있습니다. 그렇지 않으면, 이것은 단지 게으르다.
jungledev

@jungledev는 결국 resAS가 리소스를 폴더로 나누는 것을 완전히 지원하지 않기 때문에이 아이디어를 거부하고 기존 폴더 로 돌아 왔습니다 . 아마도이 답변을 변경하거나 삭제할 것입니다. 그러나 여기에 솔루션을 제공하는 것이 허용 가능한 방법이 아니라고 말하는 것은 무엇을 의미합니까?
CoolMind December

내가 말한 그대로 야 '이 튜토리얼로 해봤어요 ... (삽입 링크)'라고 말하지 마십시오. "저는이 튜토리얼 (삽입 링크)을 따랐으며 여기에 도움이 된 단계가 있습니다. 1 단계, 2 단계, 3 단계 ... 등"여기에 단계를 포함시켜야합니다. 간단히 튜토리얼에 링크하는 것은 용납 될 수 없습니다
jungledev

0

하위 디렉토리를 쉽게 가질 수는 없지만 추가 리소스 폴더를 가질 수 있습니다 . 아무도 이미 언급하지 않았지만 기본 리소스 폴더유지하고 더 추가하십시오.

    sourceSets {
        main.res.srcDirs += ['src/main/java/XYZ/ABC']
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.