Android Scrollview в RelativeLayout с ButtonBar

Я пытаюсь реализовать вид входа, где на экране отображаются несколько EditTexts и логотип, а внизу – ButtonBar, что-то вроде этого:

Alt text http://russellhaering.com/media/addAccount.png

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

Я в настоящее время

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#234C59" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingTop="5dip" android:paddingLeft="15dip" android:paddingRight="15dip" android:orientation="vertical" > <ImageView android:id="@+id/logo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="fitCenter" android:layout_centerHorizontal="true" android:src="@drawable/logo" /> <EditText android:id="@+id/input_email" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:inputType="textEmailAddress" android:singleLine="true" android:hint="Username or email" /> <EditText android:id="@+id/input_password" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="" android:inputType="textPassword" android:singleLine="true" android:hint="Password" /> </LinearLayout> <LinearLayout android:id="@+id/buttonbar_login" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal" style="@android:style/ButtonBar" > <Button android:id="@+id/button_signup" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="Sign Up" /> <Button android:id="@+id/button_login" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="Log In" /> </LinearLayout> </RelativeLayout> 

Я попытался инкапсулировать первый LinnearLayout в ScrollView, который выглядит так:

 <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- Linear Layout Here --> </ScrollView> 

Но это создает две проблемы:

  1. ScrollView не прокручивается, даже на экранах, где данные не подходят

  2. ButtonBar плавает поверх экранной клавиатуры, скрывая даже больше экрана при приближении клавиатуры.

Все отлично работало, когда у меня были кнопки внутри ScrollView, но теперь, когда у меня есть их в ButtonBar, у меня много проблем, чтобы понять это.

Оказалось, что решение требует двух шагов:

  1. Невозможность прокрутки была результатом того, что ScrollView находится за панелью кнопок. Чтобы исправить это, я определил ScrollView под панелью кнопок, а затем использовал android:layout_above="@id/buttonbar_login" чтобы заставить ScrollView полностью находиться над панелью кнопок.

  2. По-видимому, когда экранная клавиатура открывается, если у вас есть ScrollView, она будет изменена, что позволит панели кнопок плавать с клавиатурой. Чтобы исправить это, я изменил манифест и добавил андроид: windowSoftInputMode = "adjustPan", чтобы избежать изменения размера ScrollView.

Если ваш вариант использования поддерживает скрытие панели кнопок в альбомной ориентации, вы можете проверить Resources.getSystem().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE и установить панель кнопок в View.GONE .

Вероятно, вам также необходимо установить android:windowSoftInputMode="adjustResize" в <activity> в вашем файле манифеста. Android будет только помещать его в adjustResize автоматически, когда корневой макет – ScrollView (iirc).

Intereting Posts
Как сделать замену через веб-страницы, загруженные в Webview Как получить ссылку на приложение facebook, если приложение не установлено Как сделать прозрачный стиль AppCompat? Понимание Android «Аппарат радиостанции» для лучшего времени автономной работы Как определить, запущено ли приложение Android с помощью инструментария тестирования JUnit? Загрузка изображения из базы данных Android в MySQL Ссылки в TextView Как создать задний элемент в ActionBar? Как получить размер изображения в Android? Как ограничить опцию Google Drive, не появляясь при выборе файла или изображения в андроиде ниже уровня api 19 Какова точная разница между намерением и ожиданием намерения? Импорт пользовательского SO-файла в AOSP PhoneGap – клавиатура делает экран черным и мерцающим в течение некоторого времени на Samsung Galaxy Tab 10.1 Объект AlarmManager после выключения и включения телефона Внедрить метод startForeground в Android