Android Scrollview в RelativeLayout с помощью ButtonBar - PullRequest
8 голосов
/ 03 августа 2010

Я пытаюсь реализовать вид входа в систему, где на экране отображаются несколько 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. Панель кнопок плавает в верхней части экранной клавиатуры, скрывая еще больше экрана, когда клавиатура появляется.

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

Ответы [ 2 ]

15 голосов
/ 03 августа 2010

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

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

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

0 голосов
/ 03 августа 2010

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

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

...