【问题标题】:Multiple URLs in TextViewTextView 中的多个 URL
【发布时间】:2015-06-29 11:27:14
【问题描述】:

在我的应用程序中,我有一个包含multiple URLstextview。只有当我使用时,我才必须在我的应用中打开它

android:autoLink="web"
android:clickable="true"

这里它在browser 中打开,但我必须在我的Webview 中打开。

【问题讨论】:

    标签: android webview autolink


    【解决方案1】:

    创建 Web 视图布局

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/web_view_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_image"
        android:orientation="vertical" >
    
        <WebView
            android:id="@+id/webView1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@+id/image1" />
    
    </RelativeLayout>
    

    在您的网络视图活动类中使用以下代码行

    public class WebviewActivity extends Activity
    {
        private WebView         m_WebView;
    
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.webview_page);
    
            Bundle extras = getIntent().getExtras();
            if(extras != null)
            {
                m_SelectedLink = extras.getString("SelectedLink");
            }
    
            if(m_SelectedLink != null)
            {
                m_WebView = (WebView) findViewById(R.id.webView1);
                m_WebView.setInitialScale(1);
                m_WebView.getSettings().setBuiltInZoomControls(true);
                m_WebView.getSettings().setLoadWithOverviewMode(true);
                m_WebView.getSettings().setUseWideViewPort(true);
                m_WebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
                m_WebView.setScrollbarFadingEnabled(false);         
                m_WebView.setWebViewClient(new WebViewController());
                m_WebView.loadUrl(m_SelectedLink);
            }                
        }   
    
        public class WebViewController extends WebViewClient 
        {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) 
            {          
                super.onPageStarted(view, url, favicon);
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) 
            {
                view.loadUrl(url);
                return true;
            }    
    
            @Override
            public void onPageFinished(WebView view, String url) 
            {
                progressBar.setVisibility(View.GONE);
                super.onPageFinished(view, url);             
            }
    
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
            {
                 progressBar.setVisibility(View.GONE);
                 super.onReceivedError(view, errorCode, description, failingUrl);
            }
        }
    }
    

    使用以下代码从您想要的任何地方调用网络视图活动类

    Bundle extras = new Bundle();
    extras.putString("SelectedLink", "http://plackal.in/terms-and-privacy-policy/");
    Intent intent = new Intent(this, WebviewActivity.class);
    intent.putExtras(extras);
    startActivity(intent);
    

    【讨论】:

      【解决方案2】:

      请检查以下代码。

      我曾尝试使用以下代码。

      TextView tv = ....
      tv.setMovementMethod(LinkMovementMethod.getInstance());
      
          String content = tv.getText().toString();
          List<String> links = new ArrayList<String>();
      
          Pattern p = Patterns.WEB_URL;
          Matcher m = p.matcher(content);
          while (m.find()) {
              String urlStr = m.group();
              links.add(urlStr);
          }
      
          SpannableString f = new SpannableString(content);
      
          for (int i = 0; i < links.size(); i++) {
              final String url = links.get(i);
      
              f.setSpan(new InternalURLSpan(new OnClickListener() {
                  public void onClick(View v) {
                      Context ctx = v.getContext();
                      String urlToOpen = url;
                      if (!urlToOpen.startsWith("http://") || !urlToOpen.startsWith("https://"))
                          urlToOpen = "http://" + urlToOpen;
                      openURLInBrowser(urlToOpen, ctx);
                  }
              }), content.indexOf(url), content.indexOf(url) + url.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
          }
      
          tv.setText(f);
      

      希望对你有所帮助。

      InternalURLSpan 类

      public class InternalURLSpan extends ClickableSpan {
          OnClickListener mListener;
      
          public InternalURLSpan(OnClickListener listener) {
              mListener = listener;
          }
      
          @Override
          public void onClick(View widget) {
              mListener.onClick(widget);
          }
      }
      

      【讨论】:

      • 你能提到 InternalURLSpan 类吗
      猜你喜欢
      • 1970-01-01
      • 2015-12-22
      • 2021-01-27
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多