ScearView içinde LinearLayout genişlemiyor


371

Bir var LinearLayoutiçeride a ScrollViewsahiptir android:layout_height="fill_parent", ancak tam yüksekliğe genişletmek vermez ScrollView. Düzenim şuna benzer:

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

Eclipse in'de LinearLayouttam yüksekliğini genişletmediğini görebiliyorum , eğer (Anahat panelinde) seçersem, ekranı aşağıya dolduran kırmızı bir kenarlıkla vurgulanır, ancak vurgusunu seçtiğimde ekranın altına doğru genişlemez. Bunu nasıl alabilirim?ScrollViewAndroid Layout EditorScrollViewLinearLayout

Elde etmeye çalıştığım etki biraz metin ve altında bir düğme olması ( LinearLayout4. seviye içinde sadece bir düğme var). Metin bir kaydırma çubuğuna ihtiyaç duyacak kadar büyük olabilir, bu durumda kullanıcının düğmeyi görmek için aşağı kaydırmasını istiyorum. Metin bir kaydırma çubuğu için yeterince büyük değilse LinearLayout, düğmeyi içeren ekranın altına yapışmasını istiyorum .

İlk başta tam XML'i yayınlamamam gerektiğini düşündüm, çünkü bir soruda büyük bir kod parçası görmek genellikle bir dönüş. Ancak, gerekli olabilir gibi görünüyor, işte tam düzen.

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

Şu anda android:layout_gravity="bottom"sorunlu olarak başvurdum LinearLayout, bu da düğmenin ne olursa olsun ekranın altına yapışmasını sağlıyor. Ama bu aynı zamanda metnin ekranın alt kısmına yapışmasını sağlar, ki bu tam olarak peşimde değildi.

Güncelleme: , çizik olduğunu android:layout_gravity="bottom"yapar ScrollViewyapamaz için, iyi, kaydırma. Diğer fikirler?

Yanıtlar:


956

Sonunda çözümü kendim buldum. Sorun ile değildi LinearLayout, ama ile ScrollView(garip görünüyor, gerçeği göz önüne alındığında ScrollView , genişleyen değildi, iken LinearLayout).

Çözüm android:fillViewport="true"üzerinde kullanmak oldu ScrollView.


4
LinearLayout öğesinin dikey olarak genişleyeceğini unutmayın, ancak bu ek alanı kullanan bir denetim içermediği sürece bunun düzeninize yansıması gerekmeyebilir android:weight.
Paul Lammertsma

Bu gerçekten yardımcı oluyor. Bunun için teşekkürler. Ancak bu kod olmadan bazen iyi çalışır. Neden biliyor musun?
Ashokchakravarthi Nagarajan

<LinearLayout android için çalışmıyor: layout_width = "fill_parent" android: layout_height = "wrap_content" android: fillViewport = "true" android: background = "# 000" android: yönlendirme = "dikey"> </LinearLayout>
Prasad

3
Bu yüzden hasta saatlerce oturuyordum ve kodumda yanlış olanı arıyorum. Bu paramater ne için? Ne zaman yanlış yapmak istersiniz?
MyWay

@Prasad, Doğrusal Düzeyin Yüksekliğini Ebeveynle
Eşleşecek Yapın

22

Bu android:fillViewport="true"yazının çok eski olduğunu biliyorum , Kullanmak istemeyenler için bazen klavyenin üzerindeki düzenleme metnini getirmiyor. Amacı çözen LinearLayout yerine Göreli düzeni kullanın.


8

Düzeninizi xml sağlayabilir misiniz? Bunu yapmak, insanların sorunu en az çabayla yeniden yaratmalarını sağlayacaktır.

Ayarlamanız gerekebilir

android:layout_weight="1"

genişletilmiş olmasını istediğiniz öğe için


1
Cevabınız için teşekkür ederim. Önerinizi denedim ama işe yaramadı. Ayrıca sorum xml düzenini içerecek şekilde güncelledim.
Felix

3

Çözüm,

android:fillViewport="true"

üzerinde Kaydırma görünümüne ve kullanımına üstelik deneyin

"wrap_content"yerine "fill_parent"olarak"fill_parent"

şu anda kullanımdan kaldırıldı.


2

Bunu almak için dinamik olarak kullandım. Ben bir LinearLayout var ve bu çocuk içinde ScrollView kullanılır. Sonra tekrar LinearLayout almak ve bu LinearLayout ne istediğinizi u ekleyin ve sonra bu LinearLayout ScrollView eklemek ve nihayet bu ScrollView LinearLayout ekleyin. Sonra u ScrollView ur kaydırma alabilirsiniz ve hiçbir şey görünür kalmayacak.

LinearLayout (Parent) - ScrollView (LinerLayout'un alt öğesi) - LinearLayout (ScrollView'ın alt öğesi) - buraya istediğiniz metni textView, Buttons, spinner vb. Ekleyin. Ardından bu LinearLyout'u ScrollView öğesine ekleyin. Bcoz uygulanabilir ScrollView için sadece bir ÇOCUK ve son bu ScrollView LinearLyout.I tanımlı alan Ekran boyutu aşarsa u ScrollView içinde bir Scroll alacaksınız.


Ancak bu çözüm, xml'yi daha karmaşık hale getirir ve şişirmek için daha fazla zaman alır.
twlkyao

1

Benim durumumda vermedim

(ScrollView'ın Alt Öğesi)

Bu yüzden varsayılan olarak yataydır, ancak scrollview dikey olarak kayar, bu yüzden lütfen 'android: orientation = "vertical"' in ScrollView's Child'ınıza (LinearLayout olması durumunda) ayarlanıp ayarlanmadığını kontrol edin.

Bu benim durumumdu, birine yardım etmesini umuyor

.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.