2017-06-06 87 views
-1

我有一个视图显示textview并启用自动链接。Android从textview(自动链接)点击链接时打开新活动

<TextView 
    android:id="@+id/txt_contents" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="30dp" 
    android:textColor="@color/txt_code_itemlist" 
    android:autoLink="web" 
    android:textSize="22sp" /> 

现在,当我点击从textview链接它将打开浏览器。但是当我点击相同的链接时,我想找到打开新活动的方式。

+0

落实TextView的 –

+0

@JaydeepPatel我只希望在HTTP链接启用点击操作的onclick监听器。 – Goffity

+0

检查文本是否为url:URLUtil.isValidUrl(url) –

回答

0

您可以添加它。

text_view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(CurrentActivity.this,YourNewActivity.class); 
      startActivity(intent); 
     } 
    }); 

希望这会有所帮助。

+0

谢谢。 @sarthak,但是这个解决方案会在点击Textview的任何区域时打开新的活动。我想只能通过http链接进行活动。 – Goffity

0

的工作完美:

tvoublie.setPaintFlags(tvoublie.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 
      Linkify.addLinks(tvoublie, Linkify.ALL); 
      tvoublie.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.i("LoginActivity", "Sign Up Activity activated."); 
        // this is where you should start the new Activity 
        Intent intent = new Intent(CurrentActivity.this,YourNewActivity.class); 
        startActivity(intent); 

       } 
      }); 

本打开Ø浏览器,网址:

register.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(); 
       intent.setAction(Intent.ACTION_VIEW); 
       intent.addCategory(Intent.CATEGORY_BROWSABLE); 
       intent.setData(Uri.parse("https://www.google.com")); 
       startActivity(intent); 
      } 
     }); 
+0

这将使所有带下划线的文本。 – Goffity

+0

当然@Goffity – Mohamed

+0

并打开新的活动 – Mohamed

0

可以在TextView中使用Linkify,

TextView sample = (TextView) findViewById(R.id.txt_contents); 

    String webUrlOrText = "www.google.com a search Engine"; 
    Spannable spannableString = new SpannableString(Html.fromHtml(webUrlOrText)); 



    Linkify.addLinks(spannableString, Linkify.WEB_URLS); // It will make only Weblink clickable 

    URLSpan[] urlSpans = spannableString.getSpans(0, spannableString.length(), URLSpan.class); 
    for (URLSpan urlSpan : urlSpans) { 
     LinkSpan linkSpan = new LinkSpan(urlSpan.getURL()); 
     int spanStart = spannableString.getSpanStart(urlSpan); 
     int spanEnd = spannableString.getSpanEnd(urlSpan); 
     spannableString.setSpan(linkSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     spannableString.removeSpan(urlSpan); 
    } 

    sample.setText(spannableString); 
    sample.setMovementMethod(LinkMovementMethod.getInstance()); 

而且LinkSpan类,

private class LinkSpan extends URLSpan { 
    private LinkSpan(String url) { 
     super(url); 
    } 

    @Override 
    public void onClick(View view) { 
     String url = getURL(); 

     if (url != null) { 
      // Open the Activity here 
      Log.d(TAG, "Url clicked"); 
     } 
    } 
} 
+0

它仍然是开放的网络浏览器。 – Goffity

+0

我编辑了我的答案,我添加了示例TextView,我检查了我的设备工作正常。如果我们点击“www.google.com”其他地方,它会打印该日志,如果点击它将不打印日志。 –

+0

我跟着你回答。它可以检测到url,我检查spanStart和spanEnd的日志,但事件onClick不起作用。 我在android 6.0上测试。 – Goffity

0

使用以下代码来识别文本的一部分被点击

tv.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    ClassroomLog.log(TAG, "Textview Click listener "); 
    if (tv.getSelectionStart() == -1 && tv.getSelectionEnd() == -1) { 
     //This condition will satisfy only when it is not an autolinked text 
     //Fired only when you touch the part of the text that is not hyperlinked 
    } 
} 

});

和编写代码做任何你想要的任何一种情况下