最近在项目中使用android:ellipsize="end"无效,经过排查,发现不是没有省略号,而是已经超出了屏幕。经过分析,我觉得是对ConstraintLayout不够了解,下面贴一下我之前的代码:
<TextView
android:id="@+id/tv_organization"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/app_spacing_8"
android:layout_marginStart="@dimen/app_spacing_8"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/color_bebebe"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@id/tv_time"
app:layout_constraintLeft_toRightOf="@id/tv_time"
tools:text="测试ellipsize测试ellipsize测试ellipsize测试ellipsize测试ellipsize测试ellipsize"/>
</android.support.constraint.ConstraintLayout>
坑爹的是,这种方式在预览界面是没问题的,运行在手机上却出现bug
想到我之前没有在ConstraintLayout中使用过这种方式,我读了一片相关博客,大概明白了来龙去脉,ConstraintLayout中的控件都要规定约束范围,之前的写法显然违背了这个原则,textview的最大宽度等于它的父布局的宽,加上左侧别的控件的宽度,导致超出了屏幕。明白了这一层,对textview的宽度做了约束,果然实现了最终效果。这是修改后的代码:
<TextView
android:id="@+id/tv_organization"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/app_spacing_8"
android:layout_marginStart="@dimen/app_spacing_8"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/color_bebebe"
android:textSize="@dimen/app_text_size_10"
app:layout_constraintBottom_toBottomOf="@id/tv_time"
app:layout_constraintLeft_toRightOf="@id/tv_time"
app:layout_constraintRight_toRightOf="parent"
tools:text="测试ellipsize测试ellipsize测试ellipsize测试ellipsize测试ellipsize测试ellipsize"/>