¿Cómo puedo abrir los enlaces de TextView
en WebView
cuando hago clic en los enlaces de TextView
?¿Cómo podemos abrir los enlaces de TextView en Webview?
Respuesta
Spanned spanned = Html.fromHtml("<a href=\"http://google.com\">google.com</a>");
textView.setText(spanned);
EDITAR: Eso no es una forma ideal para manejar clic en un enlace, pero no sé de ninguna otra manera.
Su actividad principal contiene un TextView
con un enlace. El enlace URL tiene un esquema personalizado.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView link = (TextView)findViewById(R.id.link);
link.setText(
Html.fromHtml("<a href='myscheme://www.google.com'>link</a>"));
link.setMovementMethod(LinkMovementMethod.getInstance());
}
}
Cuando se hace clic en este enlace Android pone en marcha un Activity
con ACTION_VIEW
utilizando la URL del enlace. Supongamos que tiene un WebViewActivity
que maneja los URI con este esquema personalizado. Obtiene el URI pasado y reemplaza su esquema con http
.
public class WebViewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null) {
String url =
getIntent().getDataString().replace("myscheme://", "http://");
// do something with this URL.
}
}
}
Para manejar personalizados esquemas URI WebViewActivity
debe tener un filtro de intención en el archivo AndroidManifest.xml
:
<activity android:name=".WebViewActivity" android:exported="false">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="myscheme" />
</intent-filter>
</activity>
Gracias Pixie, pero se abrirá en el navegador predeterminado no en WebView. :( –
Oh, he entendido mal su pregunta. En este caso, puede crear una URL con su propio esquema y registrarla con un filtro de intención en AndroidManifest.xml. – Michael
Gracias de nuevo, pero puede explicarlo un poco más. –
hotel_website=(TextView)viewflipper.findViewById(R.id.tv_website);
hotel_website.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = "http://" +hotel_website.getText().toString();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
y en XML
<TextView
android:clickable="true"
</TextView>
establezca la propiedad androide: autolink a su diseño de vista de texto
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="your text"
android:autoLink="web" />
Siguiendo funcionó para mí. Acabo de utilizar el código onTouchEvent de LinkMovementMethod. Estableces el enlace en textView como Michael mencionó anteriormente o puedes establecerlo en strings.xml. Uso esta biblioteca para abrir los enlaces https://github.com/DreaminginCodeZH/CustomTabsHelper.
textView.setMovementMethod(new MovementMethod() {
@Override
public void initialize(TextView widget, Spannable text) {
}
@Override
public boolean onKeyDown(TextView widget, Spannable text, int keyCode, KeyEvent event) {
return false;
}
@Override
public boolean onKeyUp(TextView widget, Spannable text, int keyCode, KeyEvent event) {
return false;
}
@Override
public boolean onKeyOther(TextView view, Spannable text, KeyEvent event) {
return false;
}
@Override
public void onTakeFocus(TextView widget, Spannable text, int direction) {
}
@Override
public boolean onTrackballEvent(TextView widget, Spannable text, MotionEvent event) {
return false;
}
/**
* Borrowed code for detecting and selecting link from
* {@link LinkMovementMethod#onTouchEvent(TextView, Spannable, MotionEvent)}
*/
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
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);
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
// do whatever else you want here on link being clicked
Selection.removeSelection(buffer);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer,
buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
}
return true;
} else {
Selection.removeSelection(buffer);
}
}
return false;
}
@Override
public boolean onGenericMotionEvent(TextView widget, Spannable text, MotionEvent event) {
return false;
}
@Override
public boolean canSelectArbitrarily() {
return false;
}
});
- 1. Abrir enlaces en el navegador externo en WebView (WinRT)
- 2. Enlaces en TextView
- 3. ¿Cómo abrir webview en Blackberry?
- 4. Quitar subrayado de los enlaces en TextView - Android
- 5. ¿Es posible abrir enlaces emergentes en UIWebView?
- 6. ¿Abrir enlaces en Safari en lugar de UIWebVIew?
- 7. Resaltar texto en TextView o WebView
- 8. Abrir PDF en una WebView
- 9. Abrir webview no en el nuevo navegador
- 10. Abrir todos los enlaces en pestañas nuevas con jQuery
- 11. enlaces ajax Abrir en una nueva pestaña
- 12. Abrir archivo Html local en Webview - Android
- 13. Abrir todos los enlaces externos abrir en una nueva pestaña aparte de un dominio
- 14. ¿Cómo abrir un archivo PDF local en WebView en Android?
- 15. Android WebView, cómo manejar los redireccionamientos en la aplicación en lugar de abrir un navegador
- 16. ¿Cómo abrir el enlace de WebView a una nueva actividad?
- 17. ¿Cómo podemos abrir archivos como ppt, doc, pps, rtf, etc. en Android?
- 18. UIWebView enlaces de apertura en Safari
- 19. Enlace WebView haga clic en abrir navegador predeterminado
- 20. ¡Necesito abrir enlaces en una nueva pestaña en ie8!
- 21. Android WebView clic abrir en WebView no es un navegador predeterminado
- 22. Android: abrir un ContextMenu desde onLongPress en WebView personalizado
- 23. Mediawiki abrir enlaces externos en una nueva ventana
- 24. ¿Android WebView necesita permisos para abrir URL externas?
- 25. Abrir enlace desde Android Webview en el navegador normal como ventana emergente
- 26. regex cómo reemplazar los enlaces de Twitter
- 27. ¿Cómo dominar los enlaces/dependencias de C++?
- 28. UIWebView enlaces de teléfono detección en iphone
- 29. Siga los enlaces de redirección en scrapy
- 30. Usando jQuery para abrir todos los enlaces externos en una nueva ventana
relacionadas: http://stackoverflow.com/questions/6636283/open-a-link-in-a-webview-instead-of-default-browser –