高度为wrap_content的多行TextInputEditText不恢复大小

问题描述 投票:0回答:1

如果 xml 中有以下布局。这是更大布局的一部分

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/layoutInputNewText"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:minHeight="52dp"
        android:layout_marginTop="5dp"
        android:background="@color/white"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/inputMessage"
            style="@style/TextInputLayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="0dp"
            android:layout_marginTop="0dp"
            android:layout_marginEnd="4dp"
            android:hint="@string/write_a_message"
            android:labelFor="@id/editMessage"
            android:textColorHint="@color/chip_text"
            app:layout_constraintEnd_toStartOf="@id/buttonSend"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:startIconTint="@color/default_green">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/editMessage"
                android:layout_width="match_parent"
                android:maxHeight="150dp"
                android:layout_height="wrap_content"
                android:layout_marginEnd="4dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:inputType="textMultiLine"
                android:maxLines="3"
                android:paddingStart="20dp"
                android:paddingTop="15dp"
                android:paddingEnd="10dp"
                android:paddingBottom="15dp"
                android:textColor="@color/accent_color_light"
                android:textColorHint="@color/secondary_text_color"
                android:textSize="16sp"
                tools:ignore="Autofill,TextFields" />
        </com.google.android.material.textfield.TextInputLayout>

TextInputLayout 的样式如下:

    <style name="TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
        <item name="boxBackgroundColor">@android:color/transparent</item>
        <item name="background">@android:color/transparent</item>
        <item name="backgroundTint">@android:color/transparent</item>
        <item name="boxStrokeWidth">0dp</item>
        <item name="android:layout_marginStart">@dimen/main_side_margin</item>
        <item name="android:layout_marginEnd">@dimen/main_side_margin</item>
        <item name="android:layout_marginTop">@dimen/label_to_field_margin</item>
        <item name="colorAccent">@android:color/white</item>
        <item name="errorTextAppearance">@style/ErrorText</item>
        <item name="errorIconDrawable">@null</item>
        <item name="boxStrokeWidthFocused">0dp</item>
        <item name="colorControlNormal">@android:color/transparent</item>
        <item name="colorControlActivated">@android:color/transparent</item>
        <item name="colorControlHighlight">@android:color/transparent</item>
        <item name="android:theme">@style/ThemeOverlay.AppTheme.TextInputEditText.Outlined</item>
    </style>

    <style name="ThemeOverlay.AppTheme.TextInputEditText.Outlined" parent="">
        <item name="colorControlActivated">@color/accent_color_light</item>
    </style>

我在这样的代码中设置文本:editMessage.setText(message.message) 如果文本很长,我会按预期有一个多行 TextInputEditText 完成编辑并单击按钮后,我执行以下操作:

fun enableNextMessage(errorMsg: String?) {
        with(binding) {
            buttonSend.isEnabled = true
            if (errorMsg == null) {
                layoutReply.isVisible = false
                inputMessage.startIconDrawable = null
                editText.text = null
            } else showWarning(false, errorMsg)
        }
    }

问题在于 editText 大小保持为多行且具有最大行数。

我尝试通过以下方式设置editMessageheight:

editMessage.layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT

没有帮助

执行以下操作会有所帮助:

binding.editMessage.layoutParams.height = resources.getDimensionPixelSize(R.dimen.default_input_size)

但是当然,在那之后 editMessage 不再是多行的,并且不会改变它的大小。 我尝试设置固定高度,然后设置WRAP_CONTENT。它不起作用。一旦我设置了 WRAP_CONTENT,它就会恢复到更大的尺寸。

multiline android-textinputlayout android-textinputedittext android-layoutparams android-wrap-content
1个回答
0
投票

有帮助的是摆脱 TextInputLayout 并只留下 TextInputEditText

© www.soinside.com 2019 - 2024. All rights reserved.