LinearLayoutがScrollView内で拡張されない


371

私は持っているLinearLayout内部を持って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の完全な高さを拡張しませんScrollViewEclipseでであるため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ましたScrollViewScrollView 拡張していたのにそうではなかったという事実を考えると、奇妙LinearLayoutに思えます)。

解決策はで使用android:fillViewport="true"することScrollViewでした。


4
LinearLayoutは垂直方向に拡張しますが、を使用して追加のスペースを消費するコントロールが含まれていない限り、レイアウトに反映されない場合があることに注意してくださいandroid:weight
Paul Lammertsma 2013

これは本当に役立ちます。それをありがとう。しかし、このコードがなくてもうまくいく場合があります。なぜなのかご存知ですか?
Ashokchakravarthi Nagarajan 2014

<LinearLayout android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:fillViewport = "true" android:background = "#000" android:orientation = "vertical"> </ LinearLayout>で機能しない
プラサード

3
私は何時間も座っていて、コードのどこに問題があるのか​​を探していたので、うんざりしていました。このパラメーターについて いつfalseに設定したいですか?
MyWay

@Prasadは線形レイアウトの高さを親に合わせる
goonerDroid

22

私はこの投稿が非常に古いことを知っていますandroid:fillViewport="true"。キーボードの上にedittextが表示されないことがあるので、使用したくない人のために。目的を解決する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に追加します。次に、あなたはScrollViewでスクロールを取得でき、何も表示されません。

LinearLayout(Parent)-ScrollView(LinerLayoutの子)-LinearLayout(ScrollViewの子)-ここに、textView、Buttons、spinnerなど、必要なものを追加します。次に、このLinearLyoutをScrollViewに追加します。Bcozは適用可能なScrollViewの1つの子のみで、最後にこのScrollViewをLinearLyoutに追加します。定義された領域が画面サイズよりも大きい場合、uはScrollView内でScrollを取得します。


ただし、このソリューションではXMLがより複雑になり、インフレーションに時間がかかります。
twlkyao 2015

1

私の場合、私は与えていません

LinearLayout(ScrollViewの子)の方向

したがって、デフォルトでは水平方向になりますが、スクロールビューは垂直方向にスクロールするため、「android:orientation = "vertical"」がScrollViewの子に設定されているかどうかを確認してください(LinearLayoutの場合)。

これは私のケースで誰かが役に立てば幸いです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.