如何在ConstraintLayout中实现View最小宽度等于自身高度
TextView最小宽度匹配自身高度的无硬编码实现方案
需求说明
需要实现的TextView显示规则:
- 当文本内容所需宽度 ≤ 控件自身高度时,控件显示为正方形
- 当文本内容所需宽度 > 控件自身高度时,控件宽度自适应内容,显示为矩形
原有方案缺陷
最初通过硬编码固定值的方式设置最小宽度:
<androidx.appcompat.widget.AppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintWidth_min="20dp" android:gravity="center_horizontal"/>
该方案写死了20dp的最小宽度,无法适配不同分辨率、不同字体缩放比例的设备,通用性差。
验证可用的约束实现方案
不需要写死固定dp值,通过ConstraintLayout自带的约束属性组合即可实现需求,完整代码如下:
<androidx.appcompat.widget.AppCompatTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/c_FF4E4E" android:gravity="center_horizontal" android:text="22222222" android:textColor="@color/c_F" android:textSize="12sp" app:layout_constrainedHeight="true" app:layout_constrainedWidth="true" app:layout_constraintDimensionRatio="w,1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_min="wrap" />
关键属性说明
app:layout_constrainedWidth="true"、app:layout_constrainedHeight="true":让wrap_content模式下的控件遵守约束规则,不会超出父布局约束范围app:layout_constraintDimensionRatio="w,1":指定宽高比为1:1,宽度以高度为基准,内容宽度不足时自动撑满到和高度一致,形成正方形app:layout_constraintWidth_min="wrap":指定最小宽度跟随内容包裹,当文本内容宽度超过正方形宽度时,控件会自动拉伸适配内容,变成矩形
内容的提问来源于stack exchange,提问作者Will Chan
相关产品推荐
相关产品推荐

