簡體   English   中英

Android:使textview中的文本可點擊

[英]Android: Make text in textview clickable

我有一個包含要在textview中單擊的單詞的文本。

我在這里找到了這個評價很好的答案

文本元素看起來像textview中的鏈接,但不會觸發click函數。

我的XML:

<TextView
    android:id="@+id/mainTextView"
    android:layout_width="0dp"
    android:layout_height="193dp"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:clickable="true"
    android:enabled="false"
    android:linksClickable="true"
    android:text="@string/main_text"
    app:layout_constraintBottom_toTopOf="@+id/linearLayout2"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

這是我的代碼:

setTextViewHTML(lv_mainTextView, getResources().getString(R.string.main_text));
...
protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
{
    int start = strBuilder.getSpanStart(span);
    int end = strBuilder.getSpanEnd(span);
    int flags = strBuilder.getSpanFlags(span);
    ClickableSpan clickable = new ClickableSpan() {
        @Override
        public void onClick(View view) {
            // Do something with span.getURL() to handle the link click...
            Toast.makeText(getApplicationContext(), "Click", Toast.LENGTH_LONG).show();

        }
    };
    strBuilder.setSpan(clickable, start, end, flags);
    strBuilder.removeSpan(span);
}

protected void setTextViewHTML(TextView text, String html)
{
    CharSequence sequence = Html.fromHtml(html);
    SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
    URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);
    for(URLSpan span : urls) {
        makeLinkClickable(strBuilder, span);
    }
    text.setText(strBuilder);
    text.setMovementMethod(LinkMovementMethod.getInstance());
}

當我對其進行調試時,將調用函數“ makeLinkClickable”,但不會觸發onCLick。

任何想法和幫助,將不勝感激!

謝謝凱夫

編輯:

我在資源中的文本如下所示:

"The &lt;a href="tree">tree</a> is larger than the &lt;a href="flower">flower</a>"

當使用fromHTML提取它時,它為我提供了以下字符串:

"The <a href="tree">tree</a> is larger than the <a href="flower">flower</a>"

您的代碼是正確的。 只需刪除此行:

android:enabled=false

也許這會幫助您:

private SpannableString makeLinkSpan(CharSequence text, View.OnClickListener listener) {
    SpannableString link = new SpannableString(text);
    link.setSpan(new ClickableString(listener), 0, text.length(),
            SpannableString.SPAN_INCLUSIVE_EXCLUSIVE);
    return link;
}

private void makeLinksFocusable(TextView tv) {
    MovementMethod m = tv.getMovementMethod();
    if ((m == null) || !(m instanceof LinkMovementMethod)) {
        if (tv.getLinksClickable()) {
            tv.setMovementMethod(LinkMovementMethod.getInstance());
        }
    }
}



 /*
* ClickableString class
 */
private static class ClickableString extends ClickableSpan {
    private View.OnClickListener mListener;

    public ClickableString(View.OnClickListener listener) {
        mListener = listener;
    }

    @Override
    public void onClick(View v) {
        mListener.onClick(v);
    }
}

例:

private void spannableStringTEST()
{   

String text = "SOME TEXT! HELLO! YEA";
String text2 = "Some other text.";

        // Links
        SpannableString link = makeLinkSpan("YOUR CLICKABLE TEXT", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // respond to click
                  Toast.makeText(mContext, "IT WORKS", Toast.LENGTH_SHORT).show();
            //Intent intent = new Intent(Intent.ACTION_VIEW, "http://www.google.com");
            //context.startActivity(intent);
            }
        });
        TextView text = findViewByID(R.id.tv_cardView_text);
        text .setText(text);
        text .append(link);
        text .append(text2);


        makeLinksFocusable(text);

}

我的XML TextView:

  <TextView
  android:id="@+id/tv_cardView_text"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"/>

希望你可以做點什么!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM