Android 레이아웃 폴더에 하위 폴더가 포함될 수 있습니까? 경우 계층 구조와 하위 폴더가 있어야합니다.

지금은 모든 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 레이아웃 팝업이 없습니다. 메뉴.



답변

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 레이아웃 등)는 여전히 사양 과 일치해야합니다 .


답변

대답은 ‘아니오.

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

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

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

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


답변

난 그냥 문제가있는 사람들을위한 에스 키의 환상적인 답변을 추가하고 싶었다. (참고 : 이것은 안타깝게도 ‘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. 이익 $$$$

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

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


답변

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

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

답변

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

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

윈도우 :

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

맥:

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

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


답변

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

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

구성은 다음과 같습니다.

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

설명서를 확인하십시오 .


답변

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