EditText扩展并在屏幕外推其他视图

时间:2019-04-05 06:31:43

标签: android android-constraintlayout

我有一个具有两个视图的布局,它们的行为应如下所示:

  • 最上面是一个EditText,它应该动态增长(和收缩)。 在下面是另一种观点。 EditText一直增长到另一个 视图到达父布局的底部,然后停止增长 并变为可滚动。

可以在此处找到说明所需行为的图像(无法上传):

enter image description here

看来,问题在于将EditText限制在一定的高度,这样它才不会将另一个View推离屏幕底部。还是要给另一个“视图”一个属性,使其始终显示在屏幕上,我不知道。

我尝试了几种不同的方法来通过xml解决它。我附加的那一项仅通过限制EditText中的行数而起作用-我稍后将不得不根据设备的分辨率以编程方式对其进行更改。因此,这并不是很理想。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"   
    android:orientation="vertical">

    <include
        android:id="@+id/tripNotes_toolbar_layout"
        layout="@layout/toolbar_details" />

    <android.support.constraint.ConstraintLayout
        android:id="@+id/tripNotes_constraintLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        style="@style/CardStyle"

        android:layout_gravity="top"
        android:layout_marginLeft="@dimen/card_outer_margin_left"
        android:layout_marginRight="@dimen/card_outer_margin_left">

        <EditText
            android:id="@+id/tripNotes_editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:layout_margin="8dp"
            android:background="@null"
            android:hint="Put your notes here"
            android:inputType="textMultiLine|textCapWords"
            android:lines="12"
            android:maxLength="1000"
            android:maxLines="12"
            android:minLines="1"
            android:textColor="@color/grey_12"
            app:layout_constraintTop_toTopOf="parent" />

        <View
            android:id="@+id/tripNotes_pictureGrid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/tripNotes_editText"
            app:layout_constraintVertical_bias="0"
            app:layout_constraintVertical_weight="1"/>

    </android.support.constraint.ConstraintLayout>

</LinearLayout>

实际结果是,如果不限制EditText中的行数,则将其他View推出屏幕,但我希望使用alyout属性的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以将编辑文本包装到滚动视图中

您的布局看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"   
    android:orientation="vertical">

    <include
        android:id="@+id/tripNotes_toolbar_layout"
        layout="@layout/toolbar_details" />

    <android.support.constraint.ConstraintLayout
        android:id="@+id/tripNotes_constraintLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/CardStyle"

        android:layout_gravity="top"
        android:layout_marginLeft="@dimen/card_outer_margin_left"
        android:layout_marginRight="@dimen/card_outer_margin_left">

        <ScrollView
            android:id="@+id/tripNotes_editTextContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@+id/tripNotes_pictureGrid">
            <EditText
                android:id="@+id/tripNotes_editText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:layout_margin="8dp"
                android:background="@null"
                android:hint="Put your notes here"
                android:inputType="textMultiLine|textCapWords"
                android:textColor="@color/grey_12" />
        </ScrollView>
        <View
            android:id="@+id/tripNotes_pictureGrid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/tripNotes_editTextContainer"
            app:layout_constraintTop_toBottomOf="@id/tripNotes_editTextContainer"
            app:layout_constraintVertical_bias="0"
            app:layout_constraintVertical_weight="1"/>

    </android.support.constraint.ConstraintLayout>

</LinearLayout>

所做的更改:

  • 约束布局高度从match_parent更改为wrap_content
  • 编辑文字
    • 删除了app:layout_constraintTop_toTopOf="parent"(不再需要,因为它包装在滚动视图中)
    • 删除了maxLines, lines, minLines and maxLength个属性
  • 添加了ScrollView
  • 底视图:
    • 已更改 app:layout_constraintStart_toStartOf="parent"app:layout_constraintStart_toEndOf="@id/tripNotes_editTextContainer"
    • 已更改 app:layout_constraintTop_toBottomOf="@id/tripNotes_editText"app:layout_constraintTop_toBottomOf="@id/tripNotes_editTextContainer"

底部视图将位于Edittext的正下方,并向下直到屏幕底部,并且EditText将变为可滚动