2012-10-09 2 views
7

최소한의 상용구 코드로 레이아웃을 재사용하거나 별칭을 지정하는 방법을 알고 싶습니다.레이아웃 별칭에 대한 Android 설명서가 잘못 되었나요?

Android documentation about layout aliases이 올바르지 않고 일관성이 없어 보입니다.

<resources> 
    <item name="main" type="layout">@layout/main_twopanes</item> 
</resources> 

나는 이것을 컴파일하려고하면

가, 내가 Attribute is missing the Android namespace prefix 오류 : 문서의이 섹션에서는 예를 들어 다음과 같은 레이아웃 파일을 보여줍니다. 심지어 resources 요소에 네임 스페이스를 추가 한 후, 나는 error: Error: String types not allowed (at 'type' with value 'layout').

Elsewhere in the Android documentation를 얻을, 그들은 별명 레이아웃에 다른 겉으로는 거꾸로 잘못된 방법을 보여

기존 레이아웃에 별칭을 만들려면 사용 요소 인 에 포장 된 입니다. 예를 들어 :

<?xml version="1.0" encoding="utf-8"?> 
<merge> 
    <include layout="@layout/main_ltr"/> 
</merge> 

는이 로그 캣 E/AndroidRuntime(1558): android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true에서 다음과 같은 오류가 발생합니다 실행합니다. 따라서이 오류는 <include><merge> 쌍이 불필요한 부모 인 View을 필요로하기 때문에 실수 여야한다는 사실을 강조하는 것으로 보입니다.

마지막으로 이 있는데, 이전 방향과 모순되는 것처럼 보이며, 반전 된 형태의 최상위 레벨 인 <merge><include/></merge>에 대한 언급이 없습니다.

이러한 중복보기 그룹을 포함하지 않으려면 대신 요소를 재사용 가능한 레이아웃의 루트보기로 사용할 수 있습니다. 예를 들어 :

<merge xmlns:android="http://schemas.android.com/apk/res/android"> 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/add"/> 

    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/delete"/> 

</merge> 
+1

[첫 번째 방법] (http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters)은 컴파일되어 제대로 작동하는 것 같습니다. 최신 SDK 도구가 설치되어 있습니까? – Joe

+0

@Joe가 이것을 확인해 주셔서 감사합니다! 결국 나는 지시 사항을주의 깊게 읽지 않았다. layout.xml을'values-large' 폴더가 아닌'layout-large' 폴더에 넣으십시오. –

답변

7

첫 번째 기술은 작동, 당신은 단지 올바른 폴더에 <resources> 파일을 넣어해야합니다. <include>을 통해 레이아웃을 다시 사용할 때처럼 layout 폴더가 아닌 values 폴더에 있어야합니다.

예를 들어, layout 폴더에있는 editor.xml이라는 레이아웃이 있다고 가정합니다. 화면 크기가 smallnormal 인 특수한 레이아웃을 사용한다고 가정합니다. 반복하지 않으려는 경우이 레이아웃을 복사하여 layout-smalllayout-normal 폴더에 붙여 넣은 다음 각 폴더에 editor.xml으로 이름을 지정하면됩니다. 따라서 editor.xml이라는 세 개의 파일이 있습니다.

자신을 반복하지 않으려면 layout 메인 폴더에 특수 레이아웃을 배치하고 이름을 예 : compact_editor.xml으로 지정합니다. 그런 다음 values-smallvalues-normal 폴더에 layout.xml이라는 파일을 만듭니다. 각 파일은 다음과 같이 표시됩니다.

나는 다른 두 가지 문제점에 대해 documentation issue을 제출했습니다.

+1

"병합의 역전 된 사용은 달리 문서화되지 않은 것 같습니다."- 어떤 이유로 든 ''이 루트 요소로 지원되지 않는다는 이유 때문에 ''이 필요합니다. 그렇지 않으면 ''을 사용하는 것이 정상입니다. ''은 "여기에 불확실한 부모 노드에 들어가야하는 위젯과 컨테이너가 있습니다."()가 루트 XML 요소로 사용됩니다 (XML에는 하나가 필요하기 때문에). 이 경우 "위젯과 컨테이너의 묶음"은 다른 레이아웃 리소스에 저장되므로 ''이됩니다. – CommonsWare

+0

@CommonsWare는 합리적인 것 같지만, 이것은 [실제 문서] (http://developer.android.com/training/improving-layouts/reusing-layouts.html#Merge)가 아닌 ''에 대한 귀하의 이해를 바탕으로 한 귀하의 해석입니다. . –

+0

글쎄, 실제 문서가 상을받을 수는 없지만 거기에 내가 쓴 내용과 모순되는 내용은 없습니다. – CommonsWare

관련 문제