Make links open in my webview rather than default browser:
private void setLinks(View view) {
String linksAsText = getLinksAsText();
linksContainerView = view.findViewById(R.id.links_container);
linksContainerView.setVisibility(linksAsText.isEmpty() ? View.GONE : View.VISIBLE);
linksTextView = (TextView) view.findViewById(R.id.links);
linksTextView.setText(linksAsText);
linksTextView.setMovementMethod(LinkMovementMethod.getInstance());
linksTextView.setLinksClickable(true);
setTextViewHTML(linksTextView, getLinksAsText());
}
private String getLinksAsText() {
StringBuilder builder = new StringBuilder();
for (String link : feed.getLinks()){
builder.append("<br>");
builder.append("<html>");
builder.append("<a href=\"");
builder.append(link);
builder.append("\">");
builder.append(link);
builder.append("</a></html>");
}
String linksText = builder.toString();
return linksText.isEmpty() ? "" : linksText.substring(4);
}
private void setTextViewHTML(TextView text, String html)
{
CharSequence sequence = Html.fromHtml(html);
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);
for(URLSpan span : urls) {
makeLinkClickable(strBuilder, span);
}
text.setText(strBuilder);
}
private void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
{
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
ClickableSpan clickable = new ClickableSpan() {
public void onClick(View view) {
openUrlInWebView(span);
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
private void openUrlInWebView(URLSpan span) {
Bundle bundle = new Bundle();
bundle.putString(WebViewFragment.URL, span.getURL());
WebViewFragment fragment = new WebViewFragment();
fragment.setArguments(bundle);
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).addToBackStack(null).commit();
}
WebViewFragment class
public class WebViewFragment extends BaseFragment {
public static String URL = "url";
private WebView webView;
private ProgressDialog progressDialog;
private int counter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage(getString(R.string.loading));
}
@Override
public void onPause() {
super.onPause();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_video_tour, null);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
webView = (WebView) view.findViewById(R.id.webview);
startWebView(getArguments().getString(URL));
}
private void startWebView(String url) {
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
counter++;
if (!progressDialog.isShowing()) {
progressDialog.show();
}
}
public void onPageFinished(WebView view, String url) {
counter--;
if (counter == 0) {
progressDialog.dismiss();
}
}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
// Other webview options
/*
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.getSettings().setBuiltInZoomControls(true);
*/
webView.loadUrl(url);
}
}
WebViewFragment layout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Usage
Bundle bundle = new Bundle(); bundle.putString(VideoTourFragment.URL, <string_URL>); VideoTourFragment fragment = new VideoTourFragment(); fragment.setArguments(bundle);
No hay comentarios:
Publicar un comentario