当键盘出现时,底部视图会被推高

时间:2017-07-03 13:24:29

标签: android android-scrollview android-relativelayout

问题已经提出here。但是没有令人满意的答案,所以我再问一遍。

我有一个可滚动的用户注册表单,屏幕底部有一个固定的SignUp按钮。我需要在底部显示SignUp按钮,即它不应该是可滚动的。我使用RelativeLayout作为根容器。

我的视图层次结构为:

enter image description here

如果是android:windowSoftInputMode =" adjustNothing"

当我点击任何EditText时,软键盘会出现,但scrollview不能完全滚动。键盘背后的键盘空间相当于键盘的空间。我想让它可滚动。

如果是android:windowSoftInputMode =" adjustPan"

它的效果好一点,但不完全是我想要的方式。它推动我的整个屏幕向上,包括不希望的工具栏。

如果是android:windowSoftInputMode =" adjustResize"

它按下我的按钮,这根本不需要。

所以,请建议我一个可以用来满足我的要求的解决方案。

这是我的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
tools:context=".activities.CreateAccountActivity">

<include
    android:id="@+id/toolbar"
    layout="@layout/app_toolbar" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/toolbar"
    android:fillViewport="true"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"><!--android:paddingBottom="@dimen/activity_vertical_margin"-->

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/ll_fields"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <EditText
                android:id="@+id/et_first_name"
                style="@style/create_account_edittext"
                android:hint="@string/first_name" />

            <EditText
                android:id="@+id/et_last_name"
                style="@style/create_account_edittext"
                android:hint="@string/last_name" />

            <EditText
                android:id="@+id/et_dob"
                style="@style/create_account_edittext"
                android:hint="@string/date_of_birth" />

            <EditText
                android:id="@+id/et_email"
                style="@style/create_account_edittext"
                android:hint="@string/email"
                android:inputType="textEmailAddress" />

            <EditText
                android:id="@+id/et_password"
                style="@style/create_account_edittext"
                android:hint="@string/password"
                android:inputType="textPassword" />

            <EditText
                android:id="@+id/et_confirm_password"
                style="@style/create_account_edittext"
                android:hint="@string/confirm_password"
                android:inputType="textPassword" />

            <LinearLayout
                android:id="@+id/ll_terms"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="@dimen/separator_margin"
                android:background="@color/et_create_account_bg"
                android:orientation="horizontal"
                android:padding="10dp">

                <CheckBox
                    android:id="@+id/cb_terms"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:theme="@style/BrandedCheckbox" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="start"
                    android:text="@string/accept_terms"
                    android:textColor="@color/white"
                    app:font="@string/font_helvetica_normal" />

            </LinearLayout>

            <LinearLayout
                android:id="@+id/ll_subscription"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/et_create_account_bg"
                android:orientation="horizontal"
                android:padding="10dp">

                <CheckBox
                    android:id="@+id/cb_subscription"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:theme="@style/BrandedCheckbox" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="start"
                    android:gravity="center_vertical"
                    android:text="@string/subscription_details"
                    android:textColor="@color/white"
                    app:font="@string/font_helvetica_normal" />

            </LinearLayout>
        </LinearLayout>

        <Button
            android:id="@+id/btn_create_account"
            style="@style/buttonStyle"
            android:layout_alignParentBottom="true"
            android:text="@string/create_account" />

    </RelativeLayout>

</ScrollView>

我的证词是:

<activity
        android:name=".activities.CreateAccountActivity"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar" />

2 个答案:

答案 0 :(得分:0)

不要使用

android:windowSoftInputMode

因此默认情况下,当软键盘显示时,它无法调整... 所以不要使用其中任何一个......

代码示例

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ScrollView"
tools:showIn="@layout/activity_scroll_view">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="Your Name..."/>

        <EditText
            android:id="@+id/editText2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="Father's Name.."/>

        <EditText
            android:id="@+id/editText3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="Mothers's Name.."/>

        <EditText
            android:id="@+id/editText4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="Email Address.."/>

        <EditText
            android:id="@+id/editText5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="Mobile No.."/>

        <EditText
            android:id="@+id/editText6"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="Present Address.."/>

        <EditText
            android:id="@+id/editText7"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="Parmanent Address.."/>

        <EditText
            android:id="@+id/editText8"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="Company Name.."/>

        <EditText
            android:id="@+id/editText9"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Name"/>

        <EditText
            android:id="@+id/editText15"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Name"/>

        <EditText
            android:id="@+id/editText14"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Name"/>

        <EditText
            android:id="@+id/editText10"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Name"/>

        <EditText
            android:id="@+id/editText12"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Name"/>

        <EditText
            android:id="@+id/editText13"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Name"/>

        <EditText
            android:id="@+id/editText11"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Name"/>

        <Button
            android:id="@+id/btn_signup"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SignUp"/>
    </LinearLayout>
</ScrollView>

活动的AndroidMaifest.xml中的代码

    <activity
        android:name=".ScrollView"
        android:label="@string/title_activity_scroll_view"
        android:theme="@style/AppTheme.NoActionBar">
    </activity>

答案 1 :(得分:0)

在滚动视图中包裹您的布局,因为滚动视图只能有一个子项,最好将相对布局包装在其中。

<ScrollView>
 <RelativeLayout>
  ...
 </RelativeLayout>
</ScrollView>