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

Android自定义控件TextView底部内容被截断问题求助

问题:自定义控件中TextView底部内容被截断

自定义控件布局代码:

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

    <EditText
        android:id="@+id/numText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:autofillHints=""
        android:background="@null"
        android:backgroundTint="@color/primary_text"
        android:digits="0123456789"
        android:inputType="number"
        android:text="@string/txt_9999"
        android:textColor="@color/primary_text"
        android:textSize="16sp"
        tools:drawableLeft="@drawable/ic_sequence" />

    <TextView
        android:id="@+id/numDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/numText"
        android:gravity="center"
        android:text="numDescription"
        android:textColor="@color/material_dynamic_secondary10"
        android:textSize="8sp" />

</RelativeLayout>

在Fragment中的使用代码:

<com.example.remote_dslr.EditNumber
    android:id="@+id/txtBtnDelay"
    android:layout_width="170dp"
    android:layout_height="wrap_content"
    android:key="p_BtnTime"
    android:layout_marginTop="6sp"
    custom:numIco="@drawable/ic_ring"
    custom:numMax="10"
    custom:numMin="1"
    custom:numUM="@string/txt_btnPressTime"
    app:layout_constraintStart_toStartOf="@+id/btnReset"
    app:layout_constraintTop_toBottomOf="@+id/btnReset"/>

解决方案

方案1:给TextView添加底部内边距

给numDescription的TextView增加底部内边距,预留足够空间避免文本被截断:

<TextView
    android:id="@+id/numDescription"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/numText"
    android:gravity="center"
    android:text="numDescription"
    android:textColor="@color/material_dynamic_secondary10"
    android:textSize="8sp"
    android:paddingBottom="2dp" />

方案2:替换布局容器为LinearLayout

RelativeLayout在计算wrap_content高度时可能存在偏差,换成垂直方向的LinearLayout,布局计算更稳定:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    xmlns:tools="http://schemas.android.com/tools">

    <EditText
        android:id="@+id/numText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:autofillHints=""
        android:background="@null"
        android:backgroundTint="@color/primary_text"
        android:digits="0123456789"
        android:inputType="number"
        android:text="@string/txt_9999"
        android:textColor="@color/primary_text"
        android:textSize="16sp"
        tools:drawableLeft="@drawable/ic_sequence" />

    <TextView
        android:id="@+id/numDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="numDescription"
        android:textColor="@color/material_dynamic_secondary10"
        android:textSize="8sp"
        android:layout_marginTop="2dp" />

</LinearLayout>

方案3:修正自定义控件的测量逻辑

如果EditNumber重写了onMeasure方法,确保正确计算总高度,不要限制子视图的显示空间:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int totalHeight = getPaddingTop() + getPaddingBottom();
    for (int i = 0; i < getChildCount(); i++) {
        View child = getChildAt(i);
        totalHeight += child.getMeasuredHeight();
        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) child.getLayoutParams();
        totalHeight += params.topMargin + params.bottomMargin;
    }
    setMeasuredDimension(getMeasuredWidth(), totalHeight);
}

方案4:调整EditText的底部间距

给EditText添加底部外边距,让TextView和EditText之间保留足够空间,确保TextView完整显示:

<EditText
    android:id="@+id/numText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autofillHints=""
    android:background="@null"
    android:backgroundTint="@color/primary_text"
    android:digits="0123456789"
    android:inputType="number"
    android:text="@string/txt_9999"
    android:textColor="@color/primary_text"
    android:textSize="16sp"
    tools:drawableLeft="@drawable/ic_sequence"
    android:layout_marginBottom="2dp" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:43:28