在我的android應用程序中處理文本視圖鏈接單擊我目前正在TextView中呈現HTML輸入,如下所示:tv.setText(Html.fromHtml("<a href='test'>test</a>"));所顯示的HTML是通過外部資源提供給我的,所以我不能像我想的那樣改變周圍的事物,但是我當然可以對HTML做一些正則表達式的修改,比如將href值更改為其他的東西。我想要的是能夠直接從應用程序中處理鏈接,而不是讓鏈接打開瀏覽器窗口。這完全可以實現嗎?我猜有可能將href-值的協議設置為“myApp:/”,然后注冊一些可以讓我的應用程序處理該協議的內容。如果這確實是最好的方法,我想知道是如何做到的,但我希望有一種更簡單的方法,即“當在這個文本視圖中單擊鏈接時,我想引發一個事件,該事件接收鏈接的href值作為輸入參數”
3 回答
慕標琳琳
TA貢獻1830條經驗 獲得超9個贊
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));
- 3 回答
- 0 關注
- 625 瀏覽
添加回答
舉報
0/150
提交
取消
