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
相关产品推荐
相关产品推荐

