Адаптация компонента при появлении виртуальной клавиатуры

Я проектирую простое действие входа в систему. Я использовал следующий формат XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical"
        android:layout_gravity="center_vertical|center_horizontal"
        android:gravity="center_vertical|center_horizontal"
        android:layout_margin="15dp">
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="My application title"
            android:textSize="30sp"/>
    </LinearLayout>

     <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:orientation="vertical"
        android:layout_gravity="center_vertical|center_horizontal"
        android:gravity="center_vertical"
        android:layout_margin="15dp">
          <EditText 
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:hint="Username"/>      
          <EditText 
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:hint="Password"
              android:layout_marginTop="15dp"/>
          <Button 
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_marginTop="15dp"
              android:text="Login"/>
     </LinearLayout>

</LinearLayout>

И я получил этот результат:

Но если фокус на первом EditText, я получаю это:

и если фокус находится на втором EdiText, результатом будет следующее:

Учитывая, что я использовал следующую строку в манифесте, для моей деятельности:

android:windowSoftInputMode="adjustPan|adjustResize"

Я хочу, чтобы при появлении виртуальной клавиатуры два текста редактирования, кнопка и текстовое представление были видны и правильно центрировались на доступном экране. Что я должен изменить в своем коде?

ПРИМЕЧАНИЕ: у меня тот же результат, если я удалю строку в манифесте:

android:windowSoftInputMode="adjustPan|adjustResize"

1 ответ

Вы можете заменить родительский LinearLayout на ScrollView:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

  <LinearLayout ...>

  ....
  ....

  </LinearLayout>


</ScrollView>

попробуйте это, это работает для некоторых из моих apk!

Редактировать: извините, не вижу автоматического центрирования текста, поэтому вы можете вручную отредактировать ваш editext по центру, проведя пальцем. Надеюсь, это поможет