Mam LinearLayout
wnętrze, ScrollView
które ma android:layout_height="fill_parent"
, ale nie rozszerza się do pełnej wysokości ScrollView
. Mój układ wygląda mniej więcej tak:
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
Widzę, że LinearLayout
nie rozszerza pełnej wysokości, ScrollView
ponieważ w Eclipse w Android Layout Editor
, jeśli wybiorę ScrollView
(w panelu Kontur), zostanie podświetlona czerwoną ramką, która wypełnia ekran do dołu, ale kiedy zaznaczę LinearLayout
jego podświetlenie nie rozwija się na dole ekranu. Jak mogę to zrobić?
Efekt, który próbuję osiągnąć, to mieć tekst i przycisk poniżej (wewnątrz LinearLayout
poziomu 4 jest tylko przycisk). Tekst może być wystarczająco duży, aby potrzebować paska przewijania, w takim przypadku chcę, aby użytkownik musiał przewinąć w dół, aby zobaczyć przycisk. W przypadku, gdy tekst nie jest wystarczająco duży, aby przewijać pasek przewijania, chcę LinearLayout
, aby przycisk zawierający znajdował się na dole ekranu.
Na początku myślałem, że nie powinienem publikować pełnego kodu XML, ponieważ zwykle jest to odrzucenie, aby zobaczyć dużą część kodu w pytaniu. Wydaje się jednak, że może to być konieczne, więc oto pełny układ.
<?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>
W tej chwili sięgnąłem android:layout_gravity="bottom"
po problem LinearLayout
, który sprawia, że przycisk przykleja się do dolnej części ekranu bez względu na wszystko. Ale to sprawia, że tekst przykleja się do dolnej części ekranu, co nie jest dokładnie tym, czego szukałem.
Aktualizacja: podrap to, co android:layout_gravity="bottom"
uniemożliwia ScrollView
przewijanie. Inne pomysły?
źródło
android:weight
.Wiem, że ten post jest bardzo stary, dla tych, którzy nie chcą go używać,
android:fillViewport="true"
ponieważ czasami nie wyświetla tekstu nad klawiaturą. Użyj układu względnego zamiast liniowego, to rozwiązuje cel.źródło
Czy możesz podać swój układ xml? Takie postępowanie pozwoliłoby ludziom odtworzyć problem przy minimalnym wysiłku.
Być może będziesz musiał ustawić
dla elementu, który chcesz rozwinąć
źródło
Rozwiązaniem jest użyć
android:fillViewport="true"
w widoku przewijania, a ponadto spróbuj użyć
"wrap_content"
zamiast"fill_parent"
jak"fill_parent"
jest już przestarzałe.
źródło
Użyłem tego dynamicznie. Mam LinearLayout i w ramach tego ScrollView używane jako dziecko. Następnie biorę ponownie LinearLayout i dodaję to, co kiedykolwiek zobaczysz, do tego LinearLayout, a następnie ten LinearLayout dodaj do ScrollView i na koniec dodaj ten ScrollView do LinearLayout. Następnie możesz przewinąć w swoim ScrollView i nic nie pozostanie widoczne.
LinearLayout (Parent) - ScrollView (potomek LinerLayout) - LinearLayout (potomek ScrollView) - dodaj tutaj textView, przyciski, pokrętło itp. Cokolwiek chcesz. Następnie dodaj ten LinearLyout do ScrollView. Bcoz ma tylko jedno DZIECKO dla ScrollView i ostatnio dodaj ten ScrollView do LinearLyout. Jeśli zdefiniowany obszar jest większy niż rozmiar ekranu, otrzymasz ScrollView w ScrollView.
źródło
W moim przypadku nie podałem
Tak więc domyślnie zajmuje ono poziomo, ale przewijanie przewija w pionie, więc sprawdź, czy „android: orientacja =„ pionowy ”” jest ustawiony na potomka twojego ScrollView (w przypadku LinearLayout).
.
źródło