Intellij IDEA / Android Studio에서 병합 루트 태그가있는 미리보기 레이아웃


158

LinearLayout을 기반으로 복합 컴포넌트를 개발한다고 가정 해 봅시다. 따라서 다음과 같은 클래스를 만듭니다.

public class SomeView extends LinearLayout {
    public SomeView(Context context, AttributeSet attrs) {
        super(context, attrs);

        setOrientation(LinearLayout.VERTICAL);
        View.inflate(context, R.layout.somelayout, this);
    }
}

LinearLayout의 루트로 사용할 경우 somelayout.xml추가 뷰 레벨이 있으므로 merge 태그를 사용합니다.

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        android:textSize="20sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some other text"/>
</merge>

그러나 IDE의 미리보기 탭에서 병합은 항상 FrameLayout으로 작동하며 다음과 같은 내용이 표시됩니다. 병합하여 미리보기

(안드로이드 스튜디오, Intellij IDEA는 모르는 Eclipse에 대해 동일합니다)

미리보기는 레이아웃 개발 속도를 크게 높여줍니다. 일부 레이아웃의 경우에도 큰 도움이되지 않습니다. 미리보기가 merge특정 레이아웃에서 태그를 해석하는 방법을 지정하는 방법이 있습니까?


1
이 지원도 추가되고 싶습니다.
크리스토퍼 페리

나중에 tools 속성으로 해결할 수 있습니다. code.google.com/p/android/issues/detail?id=61652
조나스

답변:


352

병합 태그의 레이아웃 유형을 지정하는 데 사용할 수 있는 새로운 parentTag 도구 속성 ( Android Studio 2.2에 추가됨 )이있어 레이아웃 편집기 미리보기에서 레이아웃이 올바르게 렌더링됩니다.

따라서 예제를 사용하십시오.

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:parentTag="LinearLayout"
    tools:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        android:textSize="20sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some other text"/>
</merge>

참고 : 둘 android:layout_widthandroid:layout_height레이아웃 편집기에서 제대로 표시하기 위해 지정해야합니다.


1
다른 레이아웃 파일에 사용자 정의보기 태그를 추가 할 때 미리보기를 올바르게 표시하는 방법을 아는 사람이 있습니까? <com.yourpackage.yourcustomview id="@+id/my_cust_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
Arst


2
도구를 사용하고 있기 때문에 다음 도구도 사용할 수 있습니다. : layout_height = "match_parent"
cutiko

완전한! 감사. +1
Carson J.

66

편집 : 오래된 답변. starkej2의 답변을 참조하십시오.


Android Studio 0.5.8은 tools : showIn에 대한 지원을 추가했습니다. 이를 사용하여 <merge> 레이아웃을 미리 볼 수 있습니다.

http://tools.android.com/recent/androidstudio058released

도구를 사용하여 layout / layout_merge.xml : showIn :

<merge xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   tools:showIn="@layout/simple_relativelayout">

......

</merge>

다음을 포함하는 layout / simple_relativelayout.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/layout_merge"/>

</RelativeLayout>

14
좋은 소식! 미리보기 용으로 만 추가 레이아웃을 추가해야하기 때문에 복합 구성 요소에는 그리 유용하지 않습니다. 그러나 아무것도 아닌 것보다 낫습니다.
darja

Eclipse에서 비슷한 아이디어가 지원됩니까?
Toguard

3
Google 개발자가보고 한 티켓은 다음과 같습니다. code.google.com/p/android/issues/detail?id=61652
Neige

패딩과 같은 일부 속성을 프로그래밍 방식으로 루트보기 (이 경우 RelativeLayout)로 설정했습니다. 물론 그들은 완전히 다른보기를 사용하기 때문에이 도우미 레이아웃에 적용되지 않습니다. 유일한 해결책은 도우미 레이아웃에서 전체 사용자 정의보기를 사용하는 것입니다.
Felix Edelmann

구식이 아니라 일반 시청을 원하지 않을 때 사용할 수 있습니다
amorenew

-5

같은 병합 대신 부모로 사용자 정의 클래스를 사용할 수도 있습니다

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

그런 다음이 레이아웃을 직접 부풀리고 결과보기를로 캐스팅하십시오 SomeView. Android 스튜디오는의 부모 클래스를 직접 확인 SomeView하고와 같은 미리보기를 처리 LinerLayout합니다. 의 onFinishInflate()메소드를 사용 SomeView하여 뷰를 바인드 할 수 있습니다 findViewById(). 이 솔루션의 이점은 모든 레이아웃 정의 또는 스타일 정의를 레이아웃 파일에 직접 넣을 수 setOrientation()있으며 코드 와 같은 방법을 사용할 수 없다는 것 입니다.


2
이것은 무한 재귀를 소개하고 미리보기를 시도 할 때 스택 오버플로가 발생하여 전체 Android Studio가 영원히 중단됩니다.
mato
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.