ScrollView 내에서 LinearLayout이 확장되지 않음


371

나는이 LinearLayout내부 a를 ScrollView가지고 android:layout_height="fill_parent"있지만 전체 높이로 확장되지 않습니다 ScrollView. 내 레이아웃은 다음과 같습니다.

level    layout    layout_width    layout_height
1    LinearLayout    fill_parent    fill_parent
2    LinearLayout    fill_parent    wrap_content
3    (some irrelevant stuff)
2    ScrollView      fill_parent    fill_parent <-- this expands full height
3    LinearLayout    fill_parent    fill_parent <-- this does not (has orientation=vertical)
(following stuff probably are irrelevant, but just to be sure:)
4    TextView        fill_parent    fill_parent
4    LinearLayout    fill_parent    wrap_content

나는이 것을 볼 수 LinearLayout의 전체 높이를 확장하지 않는 ScrollView때문에 이클립스에서 Android Layout Editor, 나는 선택하면 ScrollView이 아래로 화면을 채우는 빨간색 테두리로 강조 표시됩니다 (의 개요 패널)하지만 난 선택할 때 LinearLayout의 하이라이트 화면 하단으로 확장되지 않습니다. 그렇게하려면 어떻게해야합니까?

내가 달성하려는 효과는 텍스트와 그 아래에 버튼이있는 것입니다 ( LinearLayout레벨 4 안에는 버튼이 있습니다). 텍스트는 스크롤 막대가 필요할 정도로 커질 수 있습니다.이 경우 버튼을 보려면 사용자가 아래로 스크롤해야합니다. 텍스트가 스크롤 막대에 비해 충분히 크지 않은 경우 LinearLayout버튼 이 포함 된 버튼을 화면 하단에 붙이기를 원합니다 .

처음에는 전체 XML을 게시해서는 안된다고 생각했습니다. 왜냐하면 일반적으로 질문에 엄청난 양의 코드가 표시되는 단점이기 때문입니다. 그러나 필요할 수 있으므로 전체 레이아웃이 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/video_layout"
        android:focusable="true"
        style="@style/VideoLayout">
        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:foreground="@android:drawable/ic_media_play"
            android:foregroundGravity="center">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/video_thumb"
                android:padding="5dip"
                android:background="#454545"/>
        </FrameLayout>
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:focusable="true"
            style="@style/VideoTitle"
            android:id="@+id/video_title"
            android:layout_gravity="center"
            android:layout_weight="1"/>
    </LinearLayout>
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1">
        <!-- this ScrollView expands the full height of the screen.
             However, the next LinearLayout does not expand the full height of the ScrollView -->
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:layout_gravity="fill"
            android:orientation="vertical"
            android:id="@+id/info_layout">
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/info_body"
                style="@style/InfoText"/>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                style="@android:style/ButtonBar">
                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:text="@string/button_readmore"
                        android:id="@+id/btn_read_more"/>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

현재 android:layout_gravity="bottom"문제에 의지 LinearLayout하여 버튼을 화면 하단에 붙였습니다. 그러나 그것은 또한 텍스트를 화면의 맨 아래에 붙게 만듭니다.

업데이트 : 스크래치 , 스크롤 할 수 없게 android:layout_gravity="bottom"만듭니다 ScrollView. 다른 아이디어?

답변:


956

결국 해결책을 스스로 찾았습니다. 문제는 함께하지 않았다 LinearLayout, 그러나 함께 ScrollView(이상한 보인다는이 사실을 고려 ScrollView 했다 (가) 동안, 확대 LinearLayout아니었다 참조).

해결책은에 사용 android:fillViewport="true"하는 것 ScrollView입니다.


4
LinearLayout은 세로로 확장되지만을 사용하여 추가 공간을 소비하는 컨트롤이 포함되어 있지 않으면 레이아웃에 반영되지 않을 수도 있습니다 android:weight.
Paul Lammertsma

정말 도움이됩니다. 고마워 그러나이 코드가 없으면 때로는 잘 작동합니다. 왜 그런지 아십니까?
Ashokchakravarthi Nagarajan

<LinearLayout android : layout_width = "fill_parent"android : layout_height = "wrap_content"android : fillViewport = "true"android : background = "# 000"android : orientation = "vertical"> </ LinearLayout>에서 작동하지 않음
Prasad

3
너무 아파서 몇 시간 동안 앉아서 내 코드에 문제가 있는지 검색했습니다. 이 매개 변수는 무엇입니까? 언제 거짓으로 설정하고 싶습니까?
MyWay

@Prasad는 부모님과 일치하도록 선형 레이아웃의 높이를 만듭니다
goonerDroid

22

이 게시물이 너무 오래 android:fillViewport="true"되었다는 것을 알고 있습니다. 때로는 키보드 위에 편집 텍스트를 표시하지 않기 때문에 사용하고 싶지 않은 사람들을 위해 . LinearLayout 대신 상대 레이아웃을 사용하면 목적이 해결됩니다.


8

레이아웃 XML을 제공 할 수 있습니까? 그렇게하면 사람들이 최소한의 노력으로 문제를 재현 할 수 있습니다.

설정해야 할 수도 있습니다

android:layout_weight="1"

확장하려는 항목에 대해


1
답변 주셔서 감사합니다. 나는 당신의 제안을 시도했지만 작동하지 않았습니다. 또한 레이아웃 xml을 포함하도록 질문을 업데이트했습니다.
Felix

3

해결책은

android:fillViewport="true"

스크롤 뷰 및 사용에 또한 시도

"wrap_content"대신 "fill_parent"으로"fill_parent"

더 이상 사용되지 않습니다.


2

나는 이것을 동적으로 사용했다. LinearLayout이 있으며이 내에서 ScrollView를 자식으로 사용했습니다. 그런 다음 LinearLayout을 다시 가져 와서이 뷰를 원하는 LinearLayout에 추가 한 다음이 LinearLayout을 ScrollView에 추가 하고이 ScrollView를 LinearLayout에 추가하십시오. 그런 다음 U는 ScrollView에서 스크롤을 얻을 수 있으며 아무것도 표시되지 않습니다.

LinearLayout (Parent)-ScrollView (LinerLayout의 자식)-LinearLayout (ScrollView의 자식)-원하는대로 textView, Buttons, spinner 등을 여기에 추가하십시오. 그런 다음이 LinearLyout을 ScrollView에 추가하십시오. Bcoz는 ScrollView에 대해 하나의 CHILD 만 적용하고 마지막으로이 ScrollView를 LinearLyout에 추가합니다. 정의 된 영역이 화면 크기를 초과하면 u는 ScrollView 내에서 Scroll을 가져옵니다.


그러나이 솔루션은 XML을 더 복잡하게 만들고 확장하는 데 시간이 더 걸립니다.
twlkyao

1

내 경우에는 나는

LinearLayout의 방향 (ScrollView의 자식)

따라서 기본적으로 가로가 필요하지만 scrollview가 세로로 스크롤되므로 'android : orientation = "vertical"'이 ScrollView의 Child (LinearLayout의 경우)로 설정되어 있는지 확인하십시오.

이것은 내 경우가 누군가에게 도움이되기를 바랍니다.

.

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