RelativeLayout이 wrap_content의 전체 화면을 사용 중입니다.


126

FOOBARZ가 layout_height="fill_parent"다른 요소가 없을 때 왜 맨 아래에 배치 됩니까? 모든 요소의 높이가 wrap_content입니까? 여기에 이미지 설명을 입력하십시오

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/feed_u"
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:layout_marginLeft="5dip"
        android:scaleType="centerCrop"
        android:drawableTop="@android:drawable/presence_online"
        android:text="U" />
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/feed_u">
        <ImageView
            android:id="@+id/feed_h"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/btn_minus" />
        <ImageView
            android:id="@+id/feed_ha"
            android:layout_toLeftOf="@id/feed_h"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@android:drawable/btn_plus" />
        <TextView
            android:id="@+id/feed_t"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Title">
        </TextView>
        <TextView
            android:id="@+id/feed_a"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Band"
            android:layout_below="@id/feed_t">
        </TextView>
        <TextView
            android:id="@+id/feed_s"
            android:layout_below="@id/feed_a"
            android:text="S"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">
        </TextView>
        <TextView
            android:id="@+id/feed_tm"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:text="FOOBARZ"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content">
        </TextView>

    </RelativeLayout>
</RelativeLayout>

1
사용 hierarchyviewer일이 잘못가는 경우 또는 이클립스에서 계층 구조보기 관점 결정 : developer.android.com/guide/developing/debugging/...
CommonsWare에게

이클립스 내부의 계층 뷰 관점은 어디에 있습니까? 어떤 화면?
hunterp

1
Window> Open Perspective> Other ...-@alextc의 답을 이미 알고 있다고 생각합니다.
CommonsWare

@CommonsWare 나는 그것을 찾았지만 그 공백은 실제로 어떻게 레이아웃을로드 할 수 있습니까 ??
hunterp

답변:


266

로부터 RelativeLayout문서 :

수업 개요

자녀의 위치가 서로 또는 부모와 관련하여 설명 될 수있는 레이아웃.

RelativeLayout의 크기와 해당 자식의 위치간에 순환 종속성을 가질 수는 없습니다. 예를 들어, 높이가 WRAP_CONTENT로 설정되고 자식이 ALIGN_PARENT_BOTTOM으로 설정된 RelativeLayout을 가질 수 없습니다

수업 서류

정확히 당신의 경우입니다. RelativeLayout은 그렇게 할 수 없습니다.


3
그래서 align_parentBottom을 제거하고 레이아웃은 이제 화면의 1/10에 불과합니다.이 바닥에 FOOBARZ를 어떻게 넣을 수 있습니까?
hunterp

2
FOOBARZ textview를 가져 와서 외부 RelativeLayout으로 이동하고 android : layout_below = "@ id / feed_u"로 설정하십시오. 이것이 당신이 원하는 것이 맞는지 확실하지 않습니다.

당신이 (예를 들어 상대 레이아웃에 고정 된 높이를 지정 시도 android:layout_height="200dp"이것은 당신이 사용할 수있다.android:layout_alignParentBottom="true"
gfrigon

1
큰 드로어 블을 배경으로 사용하는 경우에도 발생할 수 있습니다. 문제를 해결하려면 기본 컨텐츠를 하위 레이아웃으로 가져 와서 배경을 <ImageView>그 뒤에 있는 형제로 만듭니다 .
Ben Leggiero

1
나는 아이들도를 사용할 수 없습니다 것으로 나타났습니다 layout_heightmatch_parent
다니엘 F

52

내가 한 것처럼 이것에 대한 해결책을 찾고있는 사람들에게는 FrameLayout대신 사용할 수 있습니다 RelativeLayout.

그런 다음 원하는 중력을 아래와 같이 오른쪽 하단으로 설정할 수 있습니다

<TextView
    android:layout_gravity="bottom|right"
    android:text="FOOBARZ"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
</TextView>

FrameLayout을 사용하는 것이 좋습니다. 이 레이아웃에 더 많은 구성 요소가있는 경우 겹치지 않도록 여백을 설정해야합니다.
Veronnie

23

RelativeLayout을로 설정하고 "wrap_content" TextView를 로 설정하면 android:layout_alignParentBottom="true"자동으로 RelativeLayout을 맨 아래로 늘립니다. "원형 종속성"으로 계산 될 수 있으므로 상대 레이아웃에 이러한 종속성을 사용하지 마십시오.

에서 RelativeLayout의에 대한 문서 :

RelativeLayout의 크기와 해당 자식의 위치간에 순환 종속성을 가질 수는 없습니다. 예를 들어, 높이가로 설정되고 WRAP_CONTENT자식 이로 설정된 RelativeLayout을 가질 수 없습니다 ALIGN_PARENT_BOTTOM.

TextView를 부모 RelativeLayout 이외의 다른 것에 맞추고이 문제도주의하십시오.
순환 종속성, 정확한 코드에 대한 도움이 필요합니다

또는 더 정교한 내부 레이아웃을 추가하십시오.


2
그건 그렇고, 나는 런타임에 생각합니다. "android : layout_alignParentBottom ="true ""라고해도 원하는대로 코드가 표시됩니다. Android는 런타임 에이 경우에 대해 추가 구문 분석을 수행하여 올바르게 표시하는 것으로 보입니다. 앱을 실행해야합니다.
Dirol

0

좋은 답변입니다. 이제이 문제가 없지만 layout_alignParentBottom="true"여전히 android:background="@drawable/bkgnd"bkgnd가 큰 곳을 조심하십시오.


0

왜 깨끗하고 명백한 방법으로 이것을 달성하지 못했는지 잘 모르겠습니다. 이 성능 솔루션은 높이가 알려진 모든 View MyView에서 작동합니다.

FrameLayout에 RelativeLayout높이 wrap_content를 감싸십시오 .

<!-- width here should constrain RelativeLayout -->
<FrameLayout 
     android:layout_width="@dimen/my_layout_width"
     android:layout_height="wrap_content">

     <RelativeLayout  
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />

     <MyView
        ...
        android:layout_gravity="bottom" />
</FrameLayout>

FrameLayout의 맨 아래에있는보기가 RelativeLayout컨텐츠의 맨 위에 있으므로 해당 맨 아래에 패딩을 추가하여이를 수용해야합니다. 해당 뷰를 가변 높이로 만들려면 Subview FrameLayout을 사용하여 측정 된 뷰 높이를 기반으로 코드에 패딩을 추가하거나 성능에 대해 걱정하지 않는 경우 FrameLayout을 세로 LinearLayout으로 변경하십시오 (예 : 목록 뷰가 아님) 항목 또는보기가 상대적으로 가볍습니다.


0

자식 뷰와 함께 alight_Parent 유형 속성을 사용하지 마십시오

각각의 중력에 대해 RelativeLayout 대신 프레임 레이아웃을 사용할 수 있습니다

    <FrameLayout
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
     <TextView
        android:layout_gravity="bottom|right"
        android:text="Hello "
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">

    </TextView>

</FrameLayout>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.