【问题标题】:OnClickListener to TextView's drawableRight in Bubble/Tag TextViewOnClickListener 到 Bubble/Tag TextView 中 TextView 的 drawableRight
【发布时间】:2014-07-08 12:27:57
【问题描述】:

我使用this linkthis project link 来创建TagTextViews。

我稍微修改了一下,因为每个项目只需要一个字符串,结果如下:

在链接的代码中有一个ClickableSpan 和一个删除“标签”的onClick。因此,如果您单击“标签”上的任意位置,它将删除此标签项。

我想要的是:

  • 仅在单击 X(TextView 的android:drawableRight)时删除“标签”。
  • 如果项目本身被点击,请执行其他操作。

下面是链接中与我的问题相关的部分代码:

custom_textview.xml:

<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/et_textview"
    ...
    android:drawableRight="@android:drawable/ic_menu_close_clear_cancel"
    ... />

在 TagTextView.java 中:

BitmapDrawable bmpDrawable = getBitmapFromText(userInputString);
bmpDrawable.setBounds(0, 0, bmpDrawable.getIntrinsicWidth(), bmpDrawable.getIntrinsicHeight());
ssb.setSpan(new ImageSpan(bmpDrawable), spanEnd, startIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
this.setMovementMethod(LinkMovementMethod.getInstance());
ClickableSpan clickSpan = new ClickableSpan() {
    @Override
    public void onClick(View view) {
        // TODO: If the tiny X is clicked on the Item:
            deleteString();
        // TODO: else (If the item itself (so not the tiny X) is clicked):
            // Do something else
    }
};
ssb.setSpan(clickSpan, spanEnd, startIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

我确实找到了使用OnTouchListenerthis SO-question。但由于我正在处理多个列表项,并且在 Android 中没有 OnItemTouchListener,我不知道如何在 ClickableSpan#onClick() 中正确实现它。


编辑:

好吧,事实证明我犯了一个非常愚蠢的错误。 getBitmapFromText(String) 从具有 android:drawableRight 的 TextView 创建单个位图。所以代码中使用的ImageSpan(bitmapDrawable)是整个'Tag'。

由于现有代码在退格时也会删除标签,因此我现在将其用作删除功能,并且当我单击“标签”时执行我自己的方法。此外,我还删除了android:drawableRight,以防止我的应用用户混淆。

TL;DR:我将其更改为:单击“标记”= 做我想做的事;退格“标签”=删除方法。

很抱歉这可能造成的混乱,因为我没有包含整个代码。

【问题讨论】:

    标签: android android-layout android-drawable touch-event onitemclicklistener


    【解决方案1】:

    设置构造函数关联到 X 而不是整个小部件的 View

    构造函数: public abstract void onClick(查看小部件)

    小部件需要指向 x 小部件,而不是标签

    【讨论】:

    • 我知道你的意思,但是如何在我的问题中第一个链接提供的代码中实现这一点?而X是android:drawableRight="@android:drawable/ic_menu_close_clear_cancel"在TextView中添加的默认Android-Drawable,所以它不是一个单独的View,我可以很容易地将它作为参数传递给onClick。
    • 本教程似乎对您有所帮助,但现在无法深入研究并使用它,但 setSpan 只需通过图像和可点击跨度的差异指向 x,@987654321 @
    • 这就是我使用的教程。我的问题中的链接与该教程底部的 github-link 链接相同。我已经在那里发表了评论,所以也许最初的博主知道如何轻松解决这个问题并会尽快回复。
    • 这里使用的相对差异 sb.setSpan(clickSpan, sb.length() - contactname.length(), sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);似乎不在您的代码中(无法告诉跨度结束和开始索引的值),但理论上这应该是您的问题的原因
    • 这是第二个 ClickableSpan。在博客的整个CustomMultiAutoCompleteTextView 类中,它被调用了两次,一次是在addSpanText-method(确实是sb.setSpan(clickSpan, sb.length() - contactname.length(), sb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);,就像你说的那样),一次是在addOrCheckSpannable(这是我复制到我的问题的那个) .
    猜你喜欢
    • 2020-10-22
    • 2017-05-11
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多