使用选框椭圆形在TextView上设置textIsSelectable会添加椭圆

时间:2015-11-23 13:19:16

标签: android textview

我的应用中的屏幕可能会将非常长的字符串发布到TextView。对于这种情况,我设置了android:ellipsize="marquee",因此文本将在TextView上进行选取。

但是,我已经决定我也希望这个文本可以选择(android:textIsSelectable="true")。在大多数情况下,这没有问题。文本小于TextView,用户可以选择它。但是,如果我有textIsSelectable属性,并且文本大于TextView,则文本将拾取椭圆而不是完整字符串。 它仍会显示,但不再显示全文。它将其剪掉并显示椭圆。

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="?android:attr/listPreferredItemHeightSmall"
        android:ellipsize="marquee"
        android:focusable="true"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textIsSelectable="true">

有没有办法让文字可选,并且仍然将整个字符串保留在选框中(没有椭圆)?

1 个答案:

答案 0 :(得分:2)

无法确定这是否是错误。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="?android:attr/listPreferredItemHeightSmall"
    android:ellipsize="start"
    android:focusable="true"
    android:gravity="center_vertical"
    android:singleLine="true"
    android:textIsSelectable="true"/>

请注意,我们会在xml中设置android:ellipsize="start" - 稍后会详细介绍。

mTextView = (TextView) findViewById(R.id.tv);
mTextView.post(new Runnable() {
    @Override
    public void run() {
        mTextView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
        mTextView.setSelected(true);
    }
});

setEllipsize(TruncateAt)检查当前ellipsize值是否与提供的值相同。为了解决这个问题,我们在xml中提供android:ellipsize="start"。这样,TextView稍后就可以接受TextUtils.TruncateAt.MARQUEE了。

现在,虽然这有效,但我建议你不要这样做。您将能够看到原因 - 一旦您尝试此代码。似乎textIsSelectable 不应与marquee 一起使用 - 选择句柄不会与文本一起移动。

总而言之,它看起来非常粗略。