键盘打开时按钮重叠EditText

时间:2017-10-26 18:02:17

标签: android android-layout android-xml android-softkeyboard android-constraintlayout

我的Android应用程序中有以下ConstraintLayout:

<android.support.constraint.ConstraintLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@color/white">

      <ImageView
          android:id="@+id/image_icon"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/icon"
          app:layout_constraintTop_toTopOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintStart_toStartOf="parent"
          />

        <TextView
          android:id="@+id/instructions"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="@dimen/spacing_large"
          android:text="@string/instruction"
          app:layout_constraintTop_toBottomOf="@id/support_ic"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintStart_toStartOf="parent"
          />

      <Button
        android:id="@+id/call_button"
        android:layout_marginTop="@dimen/spacing_large"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@null"
        android:text="@string/phone"
        android:textSize="18sp"
        android:textColor="@drawable/button"
        app:layout_constraintTop_toBottomOf="@+id/instructions"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        />


      <EditText
          android:id="@+id/message_content"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:lines="8"
          android:hint="@string/support_message_hint"
          android:textColorHint="@color/text_hint"
          android:inputType="textCapSentences|textMultiLine"
          android:background="@color/background_gray"
          android:padding="@dimen/spacing_small"
          android:textColor="@color/black"
          app:layout_constraintBottom_toTopOf="@+id/send_button"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          android:gravity="top|left"
          app:layout_constraintHorizontal_weight="1"
          app:layout_constraintVertical_weight="1"
           />

        <Button
          android:id="@+id/send_button"
          android:layout_width="0dp"
          android:layout_height="wrap_content"
          android:text="@string/support_send"
          android:background="@color/button_blue"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintEnd_toEndOf="parent" />

  </android.support.constraint.ConstraintLayout>

当我打开键盘时,视图会调整,底部的两个小部件(按钮和editText)会随键盘移动。然而,我的问题是,每当发生这种情况时,@ id / call_button按钮就位于editText之上。我不想要这个。我希望editText在键盘打开时覆盖按钮。

在这种情况下,有没有办法让editText在重叠其他小部件时先行?我尝试在我的onCreate方法中添加editText.bringToFront(),但这并没有做任何事情。

另外,我试图避免在自己的布局中嵌套底部的两个小部件(按钮和editText)。我希望他们都保持在同一个ConstraintLayout中。谢谢你提前帮忙。

keyboard open image

keyboard closed image

2 个答案:

答案 0 :(得分:1)

我将android:elevation="4dp"添加到editText的xml中,但它确实有效。

答案 1 :(得分:0)

材质设计指南指明Button在其按下(8dp高程)和向上(2dp高程)状态下都使用高程https://material.io/guidelines/material-design/elevation-shadows.html#elevation-shadows-elevation-android

当两个堆叠在彼此之上在同一高度时,您看到哪个视图取决于布局中这些视图的顺序(例如,为什么您希望稍后写入的视图覆盖之前写的视图),但是提升优先于此。

正如您所发现的,您可以为其他视图添加高程,使其高于按钮,但这有点难看,可能会产生一些不必要的副作用。我认为更好的选择是在您的活动上设置清单属性android:windowSoftInputMode="adjustPan"。这将导致您的活动视图在键盘打开时向上滑动,而不是调整大小。