ConstraintView干扰显示键盘

时间:2018-11-02 19:26:54

标签: java android android-studio android-layout android-constraintlayout

我经历了来自stackoverflow和其他网站的不同解决方案,但仍未解决。出现键盘时,单选按钮位于editText的顶部。

enter image description here

在MainActivity类的onCreate方法中,我写了这一行:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

在Android Manifest.xml中,我在“活动”中添加了一行:

<activity android:name=".MainActivity"
 android:windowSoftInputMode="adjustResize"
>

以下是acitivtiy_main.xml:

  <?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout 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:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="368dp"
        android:layout_height="47dp"
        android:layout_gravity="end"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:orientation="horizontal"
        app:layout_constraintBottom_toTopOf="@+id/listView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText">

        <RadioButton
            android:id="@+id/azadRadio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:gravity="right"
            android:layoutDirection="rtl"
            android:text="آزاد"
            android:textSize="30sp" />

        <RadioButton
            android:id="@+id/qafiaRadio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:gravity="right"
            android:layoutDirection="rtl"
            android:text="قافیہ"
            android:textSize="30sp" />

        <RadioButton
            android:id="@+id/sabiqaRadio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:gravity="right"
            android:layoutDirection="rtl"
            android:text="سابقہ"
            android:textSize="30sp" />
    </RadioGroup>

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="36dp"
        android:layout_marginTop="36dp"
        android:ems="10"
        android:inputType="text"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginTop="36dp"
        android:layout_marginEnd="8dp"
        android:onClick="Finder"
        android:text="Finder"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.555"
        app:layout_constraintStart_toEndOf="@+id/editText"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="339dp"
        android:layout_height="266dp"
        android:layout_marginStart="16dp"
        android:layout_marginBottom="44dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>

2 个答案:

答案 0 :(得分:2)

您的EditText的高度(wrap_content)为非零值,并且被限制在父级的顶部。

您的ListView具有固定的高度(266dp),并限制在父级的底部。

您的RadioGroup具有固定的高度(47dp),并且被限制在EditTextListView之间。

请考虑当可用高度(父级的高度)小于266dp + 47dp + EditText高度时会发生什么。甚至更简单,请考虑如果可用高度小于266dp会发生什么情况。

在这些情况下,ListView的顶部实际上将在EditText的底部上方。这将以相反的方向“拉” RadioGroup,并且最终将自身叠加在EditTextListView的顶部。

没有快速解决方案可以解决此问题。您可能要做的就是更改所有内容的大小和约束方式。我建议:

  • 按原样保留EditText
  • 将RadioGroup更改为仅限于EditText的底部
  • 将ListView的高度更改为0dp,并将其顶部限制在RadioGroup的底部,并将其底部限制在父级的底部

这将为ListView提供所有“额外”空间。

<android.support.constraint.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ...>

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_height="47dp"
        app:layout_constraintTop_toBottomOf="@+id/editText"
        ...>

        <!-- ... -->

    </RadioGroup>

    <EditText
        android:id="@+id/editText"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        .../>

    <Button
        .../>

    <ListView
        android:id="@+id/listView"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@+id/radioGroup"
        app:layout_constraintBottom_toBottomOf="parent"/>

</android.support.constraint.ConstraintLayout>

答案 1 :(得分:2)

只需从xml的顶部和底部添加nestedScrollView。像这样:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">


<android.support.constraint.ConstraintLayout 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:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="368dp"
        android:layout_height="47dp"
        android:layout_gravity="end"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:orientation="horizontal"
        app:layout_constraintBottom_toTopOf="@+id/listView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText">

        <RadioButton
            android:id="@+id/azadRadio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:gravity="right"
            android:layoutDirection="rtl"
            android:text="آزاد"
            android:textSize="30sp" />

        <RadioButton
            android:id="@+id/qafiaRadio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:gravity="right"
            android:layoutDirection="rtl"
            android:text="قافیہ"
            android:textSize="30sp" />

        <RadioButton
            android:id="@+id/sabiqaRadio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:gravity="right"
            android:layoutDirection="rtl"
            android:text="سابقہ"
            android:textSize="30sp" />
    </RadioGroup>


    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="36dp"
        android:layout_marginTop="36dp"
        android:ems="10"
        android:inputType="text"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginTop="36dp"
        android:layout_marginEnd="8dp"
        android:onClick="Finder"
        android:text="Finder"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.555"
        app:layout_constraintStart_toEndOf="@+id/editText"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="339dp"
        android:layout_height="266dp"
        android:layout_marginStart="16dp"
        android:layout_marginBottom="44dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>
</android.support.v4.widget.NestedScrollView>