390 Stimmen

LinearLayout erweitert sich nicht innerhalb einer ScrollView

Tengo un LinearLayout innerhalb einer ScrollView Das hat android:layout_height="fill_parent" aber sie dehnt sich nicht auf die gesamte Höhe des ScrollView . Mein Layout sieht ungefähr so aus:

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

Ich kann sehen, dass die LinearLayout erstreckt sich nicht über die gesamte Höhe des ScrollView weil in Eclipse in Android Layout Editor wenn ich die Option ScrollView (im Gliederungsfenster) wird sie mit einem roten Rahmen hervorgehoben, der den Bildschirm bis zum unteren Rand ausfüllt, aber wenn ich die Option LinearLayout Die Hervorhebung reicht nicht bis zum unteren Rand des Bildschirms. Wie kann ich es dazu bringen, dies zu tun?

Der Effekt, den ich erreichen möchte, besteht darin, dass ich einen Text und eine Schaltfläche darunter (innerhalb der LinearLayout in Level 4 gibt es nur einen Knopf). Der Text kann groß genug sein, um eine Bildlaufleiste zu benötigen. In diesem Fall möchte ich, dass der Benutzer nach unten scrollen muss, um die Schaltfläche zu sehen. Falls der Text nicht groß genug für eine Bildlaufleiste ist, möchte ich, dass die LinearLayout mit der Schaltfläche, die am unteren Rand des Bildschirms haften bleibt.

Zuerst dachte ich, ich solle nicht das komplette XML posten, weil es normalerweise ein Abtörner ist, einen großen Brocken Code in einer Frage zu sehen. Es scheint jedoch notwendig zu sein, also hier ist das vollständige Layout.

<?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>

Im Moment habe ich mich auf android:layout_gravity="bottom" zur Problematik LinearLayout Dadurch bleibt die Schaltfläche auf jeden Fall am unteren Rand des Bildschirms. Aber dadurch bleibt auch der Text am unteren Rand des Bildschirms hängen, was nicht genau das ist, was ich wollte.

Aktualisierung: Streichen Sie das, android:layout_gravity="bottom" macht die ScrollView nicht in der Lage, na ja, zu blättern. Andere Ideen?

1004voto

Felix Punkte 86442

Am Ende habe ich die Lösung selbst gefunden. Das Problem war nicht mit dem LinearLayout sondern mit dem ScrollView (scheint seltsam zu sein, wenn man bedenkt, dass die ScrollView war expandiert, während die LinearLayout war nicht).

Die Lösung war die Verwendung von android:fillViewport="true" über die ScrollView .

24voto

Hardik4560 Punkte 3137

Ich weiß, dass dieser Beitrag sehr alt ist, aber für diejenigen, die keine android:fillViewport="true" weil es manchmal den Text über der Tastatur nicht anzeigt. Verwenden Sie Relative Layout anstelle von LinearLayout es löst den Zweck.

10voto

snctln Punkte 12105

Können Sie Ihr Layout xml zur Verfügung stellen? Dies würde es anderen ermöglichen, das Problem mit minimalem Aufwand nachzustellen.

Sie müssen möglicherweise Folgendes einstellen

android:layout_weight="1"

für den Artikel, den Sie erweitern möchten

8voto

Khushboo Aggarwal Punkte 157

Die Lösung ist die Verwendung von

android:fillViewport="true"

auf Ansicht scrollen und darüber hinaus versuchen, die

"wrap_content" anstelle von "fill_parent" als "fill_parent"

ist jetzt veraltet.

2voto

Braj Punkte 29

Ich habe dynamisch verwendet, um diese zu erhalten. Ich habe ein LinearLayout und innerhalb dieser verwendet ScrollView als Kind. Dann nehme ich wieder LinearLayout und fügen Sie was auch immer Ansicht u wollen zu diesem LinearLayout und dann diese LinearLayout hinzufügen ScrollView und schließlich fügen Sie diese ScrollView zu LinearLayout. Dann können u bekommen scroll in ur ScrollView und nichts wird links zu sichtbar.

LinearLayout(Parent)--ScrollView(Kind von LinerLayout) -- LinearLayout(Kind von ScrollView)-- fügen Sie hier textView, Buttons, Spinner usw. hinzu, was immer Sie wollen. Dann füge dieses LinearLyout zu ScrollView hinzu. Bcoz nur ein CHILD für ScrollView anwendbar und zuletzt fügen Sie diese ScrollView zu LinearLyout.If definierten Bereich ist von Screen-Größe überschreiten dann u wird ein Scroll innerhalb ScrollView erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X