2016-05-26 7 views
1

Ich habe einige gute Antworten zu meiner Frage gefunden, aber keine der Lösungen ist zu 100% korrekt. Der größte Teil der Lösung besagt, Hyperlink mit benutzerdefiniertem Schema zu setzen und dasselbe Schema in IntentFilter zu setzen.So öffnen Sie einen Weblink (ohne URL-Schema) in der Webansicht der App trotz Standardbrowser

Aber ich entwickle eine Nachrichten-App, Benutzer kann jeden beliebigen Text wie google.com, yahoo.com, etc. Jetzt setze ich die Eigenschaft autoLink = true in xml so alle google.com wird Hyperlink und wenn der Benutzer klickt darauf öffnet sich im Web-Browser. Ich möchte, dass dieses Verhalten geändert wird, so dass, wenn der Benutzer auf einen Link klickt, er ein neues Webview öffnen sollte, das in einer Aktivität derselben App gehört.

solution1

solution2

Antwort

0

Sie hier mit den folgenden Code

public class MainActivity extends Activity { 
    private ProgressBar progressBar; 
    private WebView webView; 

    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     progressBar = (ProgressBar) findViewById(R.id.progressBar); 
     progressBar.setMax(100); 

     webView = (WebView) findViewById(R.id.webView); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setAllowContentAccess(true); 
     webView.getSettings().setDomStorageEnabled(true); 
     webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

     WebSettings settings = webView.getSettings(); 
     settings.setPluginState(WebSettings.PluginState.ON); 
     settings.setUseWideViewPort(true); 
     settings.setLoadWithOverviewMode(true); 
     settings.setBuiltInZoomControls(true); 
     settings.setSupportZoom(true); 
     settings.setDisplayZoomControls(false); 

     webView.setWebViewClient(new WebViewClientDemo()); 
     webView.setWebChromeClient(new WebChromeClientDemo()); 
     webView.loadUrl("http://business-new.zakoopi.com/#/login/signin"); 

    } 

    private class WebViewClientDemo extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      progressBar.setVisibility(View.GONE); 
      progressBar.setProgress(100); 
     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      progressBar.setVisibility(View.VISIBLE); 
      progressBar.setProgress(0); 
     } 
    } 

    private class WebChromeClientDemo extends WebChromeClient { 
     public void onProgressChanged(WebView view, int progress) { 
      progressBar.setProgress(progress); 
     } 


     @Override 
     public boolean onJsAlert(WebView view, String url, String message,JsResult result) { 
      //Required functionality here 
      return super.onJsAlert(view, url, message, result); 
     } 

    } 


} 
+0

Hallo, ich weiß, wie in Android und Laden von beliebiger URL in dem Web-Ansicht zu erstellen. Was ich wissen will ist, ich habe recyclreview und alle Zeilen davon wird dynamisch erstellt, wie Benutzer Nachrichten sendet. Der Benutzer könnte eine Nachricht senden, die einen URL-Text wie googl.com, yahoo.com usw. enthalten könnte. Im Moment erscheinen alle diese Texte in einer anderen Farbe und klicken, wenn der Benutzer darauf klickt, öffnet es sich im Standard-Browser . Ich möchte dieses normale Verhalten des Öffnens im Browser außer Kraft setzen. – Pruthviraj

0

Sie müssen möglicherweise Linkify verwenden.

String text = "These are some sample links:some random links"; 
Spannable spannable = new SpannableString(Html.fromHtml(text)); 
Linkify.addLinks(spannable, Linkify.WEB_URLS); 

Jetzt müssen Sie auf die Klicks hören. Das kannst du so machen.

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

Auch Erstellen Sie die Autoverladerampe Klasse

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

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

      startActivity(new Intent(LinkTestActivity.this,YourWebactivity.class).putExtra("url",url)); 

     } 
    } 
} 
+0

Hallo Ich habe die obige Lösung versucht aber nicht für mich arbeiten. Nachfolgend ist mein Code Spannable spannable = neuer SpannableString ("Hi dude google.com"); Linkify.addLinks (spannbar, Linkify.WEB_URLS); dude to space constraint Ich habe nur imp Zeilen – Pruthviraj

+0

Was war das Problem? Links nicht erkannt? "Html.fromHtml (Text)" dies ist auch Imp .. Können Sie versuchen, dies nach dem Hinzufügen, dass auch –

+0

Link erkannt wird. Beim Klicken öffnet sich der Link im Standardbrowser. Ich erhalte in der OnClick-Methode von LinkSpan keinen Click-Event-Callback. Ja, versuchte Html.fromHtml (Text). – Pruthviraj

0

Diese Lösung eigentlich für mich gearbeitet. Aber Onclick-Event löst zweimal aus, aber ich handle damit.

private boolean isClickingLink = false;

Textansicht textView = (TextView) findViewById (R.id.main_text); textView.setMovementMethod (LinkMovementMethod.getInstance());

CharSequence charSequence = textView.getText(); 
SpannableStringBuilder sp = new SpannableStringBuilder(charSequence); 

URLSpan[] spans = sp.getSpans(0, charSequence.length(), URLSpan.class); 

for (URLSpan urlSpan : spans) { 
    CustomSpan customSpan= new CustomSpan (urlSpan.getURL()); 
    sp.setSpan(customSpan, sp.getSpanStart(urlSpan), 
      sp.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

textView.setText(sp); 

textView.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // 2.if clicking a link 
     if (!isClickingLink) { 
      Log.w("log", "not clicking link"); 
     } 
     isClickingLink = false; 
    } 
}); 

private Klasse CustomSpan erweitert ClickableSpan {

private String url; 

public CustomSpan (String url) { 

    super(); 
    thid.url= url; 
} 

@Override 
public void onClick(View widget) { 

    isClickingLink = true; 
} 

}

Verwandte Themen