【问题标题】:Bottom view is pushed up when keypad appears出现小键盘时,底部视图被向上推
【发布时间】:2017-07-04 20:45:47
【问题描述】:

问题已经被问到here。但是没有满意的答案,所以我再问一次。

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

我的视图层次结构是:

如果是 android:windowSoftInputMode="adjustNothing"

当我点击我的任何 EditText 时,会出现软键盘,但滚动视图不能完全滚动。相当于键盘的空间在键盘后面消失了。我想让它可以滚动。

如果是 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" />

【问题讨论】:

    标签: android android-scrollview android-relativelayout


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      只是不要使用

      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>
      

      【讨论】:

      • 我的观点是在底部放置注册按钮,这是一个棘手的部分,在上面的代码中没有注册按钮。
      • 仔细看,我添加了一个按钮,可以是注册或其他任何东西。
      • 这个 sn-p 没有将注册按钮放在底部。只需在 Nexus7 中尝试您的 sn-p
      • 我在底部使用了 15 个 EditText 和 1 个按钮 .... "Just try your sn-p in Nexus7" 这是什么意思。
      • 你的问题与Nexus7有关吗
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 2018-05-21
      • 2021-12-17
      • 2015-12-07
      • 1970-01-01
      相关资源
      最近更新 更多