Переместить макет вверх, когда отображается программная клавиатура

Я пытаюсь настроить макет, когда программная клавиатура появляется после того, как редактируемый текст получает фокус. Прямо сейчас, если у меня много текста для редактирования и появляется клавиатура, последний текст для редактирования скрыт, и я не могу прокрутить вверх.

Вот как устроен мой макет:

Шаблон:

<LinearLayout>
    <LinearLayout>
        // header 1
    </LinearLayout>
    <LinearLayout>
        // header 1
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:orientation="vertical">
        // where I inflate view_1
    </LinearLayout>
    <LinearLayout>
        // footer
    </LinearLayout>
</LinearLayout>

Вид (view_1):

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:focusableInTouchMode="true">
        <LinearLayout>
            // ...
        </LinearLayout>
        <LinearLayout>
            // ...
        </LinearLayout>
        <LinearLayout>
            <TextView/>
            <EditText/>
            <TextView/>
            <EditText/>
            <TextView/>
            <EditText/>
            <TextView/>
            <EditText/>
        </LinearLayout>
    </LinearLayout>
</ScrollView>

Я уже пробую все виды комбинацийandroid:windowSoftInputMode (на manifest.xml и программно). Я пытался установитьandroid:isScrollContainer="false" на представлении прокрутки, но ничего.

Я тоже пробовал этоответ, помещая GlobalLayoutListener в мое представление прокрутки, но onGlobalLayout не вызывается, когда появляется клавиатура. ИisKeyboardShown всегда ложно.

Ответы на вопрос(7)

Ваш ответ на вопрос