android 版本 < 6.0 中的文本椭圆大小行为
text ellipsize behavior in android version < 6.0
我的 xml
中有以下布局,其中将包含 3 个 TextView
,它们分别对齐 left
、centre
和 right
。
<RelativeLayout
android:id="@+id/relRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:text="@string/contact"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/colon"
android:id="@+id/colonRow1"/>
<TextView
android:id="@+id/txtPrimaryContact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_toEndOf="@+id/colonRow3"
android:layout_toRightOf="@+id/colonRow3"
android:ellipsize="end"
android:gravity="end"
android:maxLines="1"
android:text="Joe SmithMartinWilliamCathcsdsdsdadas"/>
</RelativeLayout>
我现在面临的问题是,ellipsize
在 android 设备版本 < 6.0 时运行不佳或无法正常工作。我的意思是对于具有 Marshmallow
版本的设备,一旦达到最大宽度,ellipsize
就会破坏文本,但是对于具有 lollipop
或 kitkat
版本的设备,可能也会更低, ellipsize
在文本中space之后出现故障,显示ellipses
,不会长时间中断文字.
这是 android 低于 Marshmallow
的版本:
考虑名字是 FName LName
Contact : FName...
这是 android 版本高于 Marshmallow
的样子:
Contact : FName LNa...
这是低版本中的错误还是预期行为。还是有其他方法可以做到这一点?我想在所有设备中都有 Marshmallow
版本文本。不管怎样,我能做到吗?
更新
事实证明,在@Charu 的评论之后,我的假设是错误的。它实际上隐藏了设备版本 < Marshmallow
中的长文本。我怎样才能克服这个问题?
现在我一直在使用下面的代码,但是当我们检查具有不同屏幕尺寸的不同设备时,它并没有按比例放大。我已附上屏幕截图以供参考。
if(android.os.Build.VERSION.SDK_INT<Build.VERSION_CODES.M && name.length()>20)
name=name.substring(0,20)+"...";
else
txtPrimaryContact.setEllipsize(TextUtils.TruncateAt.END);
>=棉花糖设备
< Marshmallow 设备 [具体来说是 Kitkat,但也在 Lollipop 中进行了测试]
您可能会告诉我 android:singleLine="true"
有点过时,这就是您使用 android:maxLines="1"
的原因,但请相信我,将此 android:singleLine="true"
添加到您的 textView
应该可以解决问题!
我的 xml
中有以下布局,其中将包含 3 个 TextView
,它们分别对齐 left
、centre
和 right
。
<RelativeLayout
android:id="@+id/relRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:text="@string/contact"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/colon"
android:id="@+id/colonRow1"/>
<TextView
android:id="@+id/txtPrimaryContact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_toEndOf="@+id/colonRow3"
android:layout_toRightOf="@+id/colonRow3"
android:ellipsize="end"
android:gravity="end"
android:maxLines="1"
android:text="Joe SmithMartinWilliamCathcsdsdsdadas"/>
</RelativeLayout>
我现在面临的问题是,ellipsize
在 android 设备版本 < 6.0 时运行不佳或无法正常工作。我的意思是对于具有 Marshmallow
版本的设备,一旦达到最大宽度,ellipsize
就会破坏文本,但是对于具有 lollipop
或 kitkat
版本的设备,可能也会更低, ,不会长时间中断文字.ellipsize
在文本中space之后出现故障,显示ellipses
这是 android 低于 Marshmallow
的版本:
考虑名字是 FName LName
Contact : FName...
这是 android 版本高于 Marshmallow
的样子:
Contact : FName LNa...
这是低版本中的错误还是预期行为。还是有其他方法可以做到这一点?我想在所有设备中都有 Marshmallow
版本文本。不管怎样,我能做到吗?
更新
事实证明,在@Charu 的评论之后,我的假设是错误的。它实际上隐藏了设备版本 < Marshmallow
中的长文本。我怎样才能克服这个问题?
现在我一直在使用下面的代码,但是当我们检查具有不同屏幕尺寸的不同设备时,它并没有按比例放大。我已附上屏幕截图以供参考。
if(android.os.Build.VERSION.SDK_INT<Build.VERSION_CODES.M && name.length()>20)
name=name.substring(0,20)+"...";
else
txtPrimaryContact.setEllipsize(TextUtils.TruncateAt.END);
>=棉花糖设备
< Marshmallow 设备 [具体来说是 Kitkat,但也在 Lollipop 中进行了测试]
您可能会告诉我 android:singleLine="true"
有点过时,这就是您使用 android:maxLines="1"
的原因,但请相信我,将此 android:singleLine="true"
添加到您的 textView
应该可以解决问题!