2015-02-13 2 views
1

Я пытаюсь создать очень специфическое поведение в макете Android, содержащем два фрагмента, когда открывается мягкая клавиатура, как показано ниже слева направо.Свертывание и прокрутка Просмотров в LinearLayout View

Фрагмент A - форма, требующая мягкого ввода клавиатуры, а фрагмент B - фотографическое слайд-шоу и служит только визуальным наполнителем.

Behavior of android layout while opening keyboard Синий контур представляет собой вид корня. Фрагмент A - фиксированная высота, а фрагмент B заполняет оставшееся вертикальное пространство. Когда клавиатура открывается, фрагмент B разрушается до тех пор, пока его высота не станет равной 0, после чего фрагмент A станет прокручиваемым.

Я попытался следующий:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <FrameLayout 
     android:id="@+id/FragmentB" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 
    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    <FrameLayout 
     android:id="@+id/FragmentA" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
    </ScrollView> 
</LinearLayout> 

В этом виде фрагмент B остается на ту же высоту, когда экранная клавиатура открывается, и вместо фрагмента А разрушается.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    <FrameLayout 
     android:id="@+id/FragmentB" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 
    <FrameLayout 
     android:id="@+id/FragmentA" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
    </LinearLayout> 
</ScrollView> 

И в этом представлении Фрагмент B постоянно разрушился, и остается зазор в нижней части окна ниже фрагмент А.

Как можно достичь поведения макета я выложил на диаграмме выше ?

Спасибо!

ответ

1

Я нашел решение здесь:

Min height fill_parent and height wrap_content in ScrollView? Мой Результирующий код:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> <!-- FillViewport ensures the scrollview doesn't wrap the content --> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1"> <!-- Layout weight 1 means the LinearLayout will at least fill the scrollview, or wrap content if too big --> 
    <FrameLayout 
     android:id="@+id/FragmentB" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 
    <FrameLayout 
     android:id="@+id/FragmentA" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
    </LinearLayout> 
</ScrollView> 
Смежные вопросы