亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在我的android應用程序中處理文本視圖鏈接單擊

在我的android應用程序中處理文本視圖鏈接單擊

藍山帝景 2019-06-20 16:56:30
在我的android應用程序中處理文本視圖鏈接單擊我目前正在TextView中呈現HTML輸入,如下所示:tv.setText(Html.fromHtml("<a href='test'>test</a>"));所顯示的HTML是通過外部資源提供給我的,所以我不能像我想的那樣改變周圍的事物,但是我當然可以對HTML做一些正則表達式的修改,比如將href值更改為其他的東西。我想要的是能夠直接從應用程序中處理鏈接,而不是讓鏈接打開瀏覽器窗口。這完全可以實現嗎?我猜有可能將href-值的協議設置為“myApp:/”,然后注冊一些可以讓我的應用程序處理該協議的內容。如果這確實是最好的方法,我想知道是如何做到的,但我希望有一種更簡單的方法,即“當在這個文本視圖中單擊鏈接時,我想引發一個事件,該事件接收鏈接的href值作為輸入參數”
查看完整描述

3 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

如果文本視圖中有多個鏈接。例如,TextView有“https://”和“tel no”,我們可以定制LinkMotion方法,并根據模式處理對單詞的單擊。附件是定制鏈接運動方法。

public class CustomLinkMovementMethod extends LinkMovementMethod{private static Context movementContext;
private static CustomLinkMovementMethod linkMovementMethod = new CustomLinkMovementMethod();
public boolean onTouchEvent(android.widget.TextView widget, android.text.Spannable buffer, android.view.MotionEvent event){
    int action = event.getAction();

    if (action == MotionEvent.ACTION_UP)
    {
        int x = (int) event.getX();
        int y = (int) event.getY();

        x -= widget.getTotalPaddingLeft();
        y -= widget.getTotalPaddingTop();

        x += widget.getScrollX();
        y += widget.getScrollY();

        Layout layout = widget.getLayout();
        int line = layout.getLineForVertical(y);
        int off = layout.getOffsetForHorizontal(line, x);

        URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
        if (link.length != 0)
        {
            String url = link[0].getURL();
            if (url.startsWith("https"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Link was clicked", Toast.LENGTH_LONG).show();
            } else if (url.startsWith("tel"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Tel was clicked", Toast.LENGTH_LONG).show();
            } else if (url.startsWith("mailto"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Mail link was clicked", Toast.LENGTH_LONG).show();
            }
            return true;
        }
    }

    return super.onTouchEvent(widget, buffer, event);}public static android.text.method.MovementMethod getInstance(Context c){
    movementContext = c;
    return linkMovementMethod;}

應該以下列方式從文本視圖中調用這一點:

textViewObject.setMovementMethod(CustomLinkMovementMethod.getInstance(context));


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 614 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號