You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

小屏设备中message_entry输入框显示过窄的问题排查与修复

小屏设备上message_entry输入框显示过窄的原因与修复

问题现象

ID为message_entry的TextInputEditText在分辨率240×320的小屏设备上显示过窄,无法像480×640大屏设备那样占据合理宽度。

布局代码

<androidx.cardview.widget.CardView
    android:id="@+id/reply_bar_card"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardBackgroundColor="@color/replyBarCard"
    app:cardCornerRadius="24dp"
    app:cardElevation="5dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingBottom="24dp">

        <ProgressBar
            android:id="@+id/send_progress"
            style="@style/Widget.AppCompat.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="3dp"
            android:indeterminate="true"
            android:visibility="invisible" />

        <HorizontalScrollView
            android:id="@+id/attached_image_scroller"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/message_list_padding"
            android:layout_marginEnd="@dimen/message_list_padding"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:scrollbars="none"
            android:visibility="gone">

            <LinearLayout
                android:id="@+id/attached_image_holder"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="12dp"
                android:layout_marginEnd="12dp"
                android:orientation="horizontal" />

        </HorizontalScrollView>

        <LinearLayout
            android:id="@+id/smart_reply_container"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:layout_marginStart="@dimen/message_list_padding"
            android:layout_marginEnd="@dimen/message_list_padding"
            android:gravity="end"
            android:orientation="horizontal"
            android:visibility="gone">

            <ImageButton
                android:id="@+id/close_smart_replies"
                android:layout_width="32dp"
                android:layout_height="48dp"
                android:layout_gravity="center_vertical"
                android:layout_marginStart="8dp"
                android:background="?selectableItemBackgroundBorderless"
                android:clickable="true"
                android:contentDescription="@string/use_smart_replies"
                android:src="@drawable/ic_cancel"
                android:tint="@color/secondaryText" />

            <LinearLayout
                android:id="@+id/smart_reply_suggestions_container"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginEnd="12dp"
                android:layout_weight="1"
                android:gravity="end"
                android:orientation="horizontal" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/send_bar"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginStart="@dimen/message_list_padding"
            android:layout_marginEnd="@dimen/message_list_padding"
            android:alpha="0"
            android:clipToPadding="false"
            android:gravity="center_vertical|start"
            android:orientation="horizontal"
            android:padding="8dp"
            android:translationY="-32dp">

            <ImageButton
                android:id="@+id/select_sim"
                android:layout_width="32dp"
                android:layout_height="48dp"
                android:background="?selectableItemBackgroundBorderless"
                android:clickable="true"
                android:contentDescription="@string/select_sim"
                android:src="@drawable/ic_sim"
                android:tint="@color/secondaryText"
                android:visibility="gone" />

            <ImageButton
                android:id="@+id/view_scheduled_messages"
                android:layout_width="32dp"
                android:layout_height="match_parent"
                android:background="?selectableItemBackgroundBorderless"
                android:clickable="true"
                android:contentDescription="@string/view_scheduled_messages"
                android:src="@drawable/ic_schedule_small"
                android:tint="@color/secondaryText"
                android:visibility="gone" />

            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginEnd="8dp">

                <ImageButton
                    android:id="@+id/attach"
                    android:layout_width="32dp"
                    android:layout_height="48dp"
                    android:layout_gravity="center_vertical|start"
                    android:background="?selectableItemBackgroundBorderless"
                    android:clickable="true"
                    android:contentDescription="@string/attach"
                    android:src="@drawable/ic_attach"
                    android:tint="@color/secondaryText" />

                <TextView
                    android:id="@+id/text_counter"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom|center_horizontal"
                    android:layout_marginBottom="2dp"
                    android:gravity="center_horizontal"
                    android:textColor="@color/secondaryText"
                    android:textSize="12sp" />

            </FrameLayout>

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/message_entry"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@null"
                android:backgroundTint="@color/drawerBackground"
                android:hint="@string/type_message_to"
                android:imeOptions="actionSend|flagNoExtractUi"
                android:inputType="textCapSentences|textAutoCorrect|textMultiLine"
                android:maxLines="@integer/message_list_fragment_line_entry_count"
                android:minHeight="40dp"
                android:padding="8dp"
                android:paddingStart="8dp"
                android:paddingEnd="18dp"
                android:scrollHorizontally="false"
                android:textSize="16sp" />

            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/send"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginEnd="8dp"
                android:contentDescription="@string/send_message"
                android:src="@drawable/ic_send"
                app:elevation="0dp"
                app:fabSize="mini"
                app:rippleColor="@android:color/white" />

        </LinearLayout>

        <ViewStub
            android:id="@+id/attach_stub"
            android:layout_width="match_parent"
            android:layout_height="@dimen/attach_menu_height"
            android:layout="@layout/view_attach_menu" />

    </LinearLayout>

</androidx.cardview.widget.CardView>

显示效果

  • 小屏显示:message_entry输入框被压缩,宽度不足
    小屏显示效果
  • 大屏显示:message_entry输入框占据合理宽度
    大屏显示效果

原因分析

  1. LinearLayout权重分配逻辑限制:send_bar是横向LinearLayout,message_entry通过layout_weight="1"+layout_width="0dp"获取剩余空间,但布局中attach按钮的FrameLayout和send按钮都使用wrap_content固定宽度,小屏总宽度有限,固定宽度元素(含margin、padding)占据大量空间,留给message_entry的剩余空间极少。
  2. 边距未适配小屏:send_bar设置的左右layout_margin="@dimen/message_list_padding"和整体padding="8dp",若该margin值未针对小屏做缩小处理,会进一步挤压输入框的可用宽度。

修复方案

方案1:调整LinearLayout权重分配

给固定宽度元素也设置layout_width="0dp"并分配较小权重,让message_entry占据大部分空间比例:

<!-- 修改attach的FrameLayout -->
<FrameLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_marginEnd="8dp"
    android:layout_weight="0.1">

<!-- 修改send按钮 -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/send"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    android:contentDescription="@string/send_message"
    android:src="@drawable/ic_send"
    app:elevation="0dp"
    app:fabSize="mini"
    app:rippleColor="@android:color/white"
    android:layout_weight="0.1" />

<!-- 修改message_entry的权重 -->
<com.google.android.material.textfield.TextInputEditText
    android:id="@+id/message_entry"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="0.8"
    <!-- 其他属性保持不变 --> />

方案2:替换为ConstraintLayout(推荐)

使用ConstraintLayout精准控制布局,让message_entry在attach和send之间自动填充剩余空间:

<!-- 将send_bar的LinearLayout替换为ConstraintLayout -->
<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/send_bar"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_marginStart="@dimen/message_list_padding"
    android:layout_marginEnd="@dimen/message_list_padding"
    android:alpha="0"
    android:clipToPadding="false"
    android:padding="8dp"
    android:translationY="-32dp">

    <!-- select_sim和view_scheduled_messages保持不变,约束到左侧 -->
    <ImageButton
        android:id="@+id/select_sim"
        android:layout_width="32dp"
        android:layout_height="48dp"
        android:background="?selectableItemBackgroundBorderless"
        android:clickable="true"
        android:contentDescription="@string/select_sim"
        android:src="@drawable/ic_sim"
        android:tint="@color/secondaryText"
        android:visibility="gone"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintCenterVertical_toCenterVertical="parent" />

    <ImageButton
        android:id="@+id/view_scheduled_messages"
        android:layout_width="32dp"
        android:layout_height="match_parent"
        android:background="?selectableItemBackgroundBorderless"
        android:clickable="true"
        android:contentDescription="@string/view_scheduled_messages"
        android:src="@drawable/ic_schedule_small"
        android:tint="@color/secondaryText"
        android:visibility="gone"
        app:layout_constraintStart_toEndOf="@+id/select_sim"
        app:layout_constraintCenterVertical_toCenterVertical="parent" />

    <!-- attach按钮约束到左侧 -->
    <FrameLayout
        android:id="@+id/attach_container"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginEnd="8dp"
        app:layout_constraintStart_toEndOf="@+id/view_scheduled_messages"
        app:layout_constraintCenterVertical_toCenterVertical="parent">

        <!-- 内部attach按钮和text_counter保持不变 -->
        <ImageButton
            android:id="@+id/attach"
            android:layout_width="32dp"
            android:layout_height="48dp"
            android:layout_gravity="center_vertical|start"
            android:background="?selectableItemBackgroundBorderless"
            android:clickable="true"
            android:contentDescription="@string/attach"
            android:src="@drawable/ic_attach"
            android:tint="@color/secondaryText" />

        <TextView
            android:id="@+id/text_counter"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center_horizontal"
            android:layout_marginBottom="2dp"
            android:gravity="center_horizontal"
            android:textColor="@color/secondaryText"
            android:textSize="12sp" />

    </FrameLayout>

    <!-- send按钮约束到右侧 -->
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:contentDescription="@string/send_message"
        android:src="@drawable/ic_send"
        app:elevation="0dp"
        app:fabSize="mini"
        app:rippleColor="@android:color/white"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintCenterVertical_toCenterVertical="parent" />

    <!-- message_entry约束在attach和send之间,填充剩余空间 -->
    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/message_entry"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@null"
        android:backgroundTint="@color/drawerBackground"
        android:hint="@string/type_message_to"
        android:imeOptions="actionSend|flagNoExtractUi"
        android:inputType="textCapSentences|textAutoCorrect|textMultiLine"
        android:maxLines="@integer/message_list_fragment_line_entry_count"
        android:minHeight="40dp"
        android:padding="8dp"
        android:paddingStart="8dp"
        android:paddingEnd="18dp"
        android:scrollHorizontally="false"
        android:textSize="16sp"
        app:layout_constraintStart_toEndOf="@+id/attach_container"
        app:layout_constraintEnd_toStartOf="@+id/send"
        app:layout_constraintCenterVertical_toCenterVertical="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

方案3:适配小屏边距值

在res/values-ldpi/dimens.xml(对应240×320分辨率的ldpi密度)中减小message_list_padding的值:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="message_list_padding">8dp</dimen>
</resources>

同时在res/values/dimens.xml中保留默认边距值,让小屏设备使用更小的边距,给输入框留出更多空间。


内容的提问来源于stack exchange,提问作者user7391836

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:37:03