Kamrit
@Kamrit
QA Engineer

Как поднять элементы?

У меня есть код:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/ic_background_logo"
    android:theme="@style/Theme.Login.EditText"
    android:weightSum="100">
    <LinearLayout
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_width="0px"
        android:layout_height="0px"
        android:layout_weight="15" />
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:src="@drawable/ic_logo" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="57" />
    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/email_input"
            android:hint="Enter email"
            android:textColor="@android:color/white"
            android:inputType="textEmailAddress"
            android:textCursorDrawable="@drawable/color_cursor" />
    </android.support.design.widget.TextInputLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5" />
    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/password_input"
            android:hint="Password"
            android:textColorHint="@android:color/white"
            android:inputType="textPassword"
            android:textCursorDrawable="@drawable/color_cursor" />
    </android.support.design.widget.TextInputLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="10" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:text="Log In"
        android:background="#48FFFFFF"
        android:textColor="#FFFFFF"
        android:textAllCaps="false"
        android:textSize="17sp" />
</LinearLayout>

Как сделать что бы при отрытии клавиатуры EditText'ы и кнопка поднимались над клавиатурой и иконка оставалась на своем месте?
  • Вопрос задан
  • 276 просмотров
Решения вопроса 1
a13xsus
@a13xsus
Lazy developer
Неплохо было бы переделать это в relativelayout. Ну а чтобы все элементы (и кнопка) поднимались над софт-клавиатурой, нужно в манифест соответствующей активити добавить android:windowSoftInputMode="adjustResize":

<activity android:name=".MyActivity"
    android:windowSoftInputMode="adjustResize">
</activity>


Но тогда картинка-бекграунд у layout тоже будет сжиматься. Этого можно избежать, если задавать фон в onCreate самой активити, и убрать его из xml:

getWindow().setBackgroundDrawableResource(R.drawable.bg);


Сам ImageView тогда можно оставить сверху как есть, тогда он в принципе будет на месте. Правда тогда нужно будет тестить для разных экранов и ориентаций, могут быть косяки. На скорую руку я набросал так (довольно кривая разметка, но для примера сойдет):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/rel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    android:orientation="vertical"
    android:isScrollContainer="false">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:src="@drawable/firebase_lockup_400"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:background="@color/colorPrimary"
        android:text="Log In"
        android:textAllCaps="false"
        android:textColor="#FFFFFF"
        android:textSize="17sp"/>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/button1">

        <EditText
            android:id="@+id/password_input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Password"
            android:inputType="textPassword"
            android:textColorHint="@android:color/white"
            android:textCursorDrawable="@drawable/star"/>
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/text2">

        <EditText
            android:id="@+id/email_input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Enter email"
            android:inputType="textEmailAddress"
            android:textColor="@android:color/white"
            android:textCursorDrawable="@drawable/star"/>
    </android.support.design.widget.TextInputLayout>

</RelativeLayout>


Выглядит примерно так:

3501ba9764a8429dbadd6533a5b521b0.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы