Android: Html Anchor Link funciona sólo una vez en la vista web
Estoy frente a algún extraño problema en webview en el momento de la carga de contenido html con enlace de anclaje.
El siguiente código funciona perfecto para la etiqueta de anclaje, pero sólo una vez .
La segunda vez cuando presiono la etiqueta del ancla no está trabajando.
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mywebview); String html = "<html><body><p><a href='#C4'>See also Chapter 4</a></p><p><h2>Chapter 1</h2><p>This chapter explains ba bla bla</p><h2>Chapter 2</h2><p>This chapter explains ba bla bla</p><h2>Chapter 3</h2><p>This chapter explains ba bla bla</p><h2><a name='C4'>Chapter 4</a></h2><p>This chapter explains ba bla bla</p><h2>Chapter 5</h2><p>This chapter explains ba bla bla</p><h2>Chapter 6</h2><p>This chapter explains ba bla bla</p><h2>Chapter 7</h2><p>This chapter explains ba bla bla</p><h2>Chapter 8</h2><p>This chapter explains ba bla bla</p><h2>Chapter 9</h2><p>This chapter explains ba bla bla</p></body></html>"; String mime = "text/html"; String encoding = "utf-8"; WebView myWebView = (WebView)this.findViewById(R.id.webView1); myWebView.loadDataWithBaseURL(null, html, mime, encoding, null); }
He intentado este acoplamiento pero no trabajado para mí.
- La codificación de html de Android 4.0 se descompone en la vista web
- Establecer TextView texto de html-formatted cadena recurso en XML
- Android WebView: muy laggy respuesta del botón
- Hacer el botón de llamada telefónica en la página Web de Android
- Reemplazar + con espacio en html Gmail / Android cromo
ACTUALIZAR:
Resultado de la prueba de mi código en el diverso dispositivo.
Trabajando
1. Samsung S Plus -> 2.3.4
2. Samsung Galaxy Y -> 2.3.6
3. Samsung Galaxy Tab -> 2.3.3
4. Motorola Xoom -> 3.2
No funciona
1. LG Optimus -> 2.2
2. DELL XCD35 (ZTE Blade) -> 2.2
3. HTC WildFire -> 2.2.1
¿Es este tema del SO o algo más? ¿Alguna solución para esto?
- Cómo deshabilitar el desplazamiento vertical de la vista web para cargar la página entera como columna diferente
- Cómo convertir una página web (html, css, js) en una aplicación para Android
- ¿Cómo puedo hacer clic en los enlaces de fromHTML? (Androide)
- <Select> no funciona en la aplicación Phonegap en Android 2.3.3
- Descargar .apk se convierte en .txt en el teléfono
- Cómo eliminar el margen inbuilt en la vista web de Android con javascript
- La dosis de Android Html.fromHtml () no funciona correctamente en estilo de texto anidado
- Android: agregar una imagen en html webview
El problema era volver a cargar la página de nuevo después de anclar enlace Haga clic en.
He utilizado el siguiente código,
Capítulos.xml en la carpeta Activos
<html> <body> <p><a href="#C4">See also Chapter 4</a></p> <p><h2><a name='C1'>Chapter 1<a></h2><p>This chapter explains ba bla bla</p> <h2>Chapter 2</h2><p>This chapter explains ba bla bla</p> <h2>Chapter 3</h2><p>This chapter explains ba bla bla</p> <h2><a name='C4'>Chapter 4</a></h2><p>This chapter explains ba bla bla</p> <h2>Chapter 5</h2><p>This chapter explains ba bla bla</p> <h2>Chapter 6</h2><p>This chapter explains ba bla bla</p> <h2>Chapter 7</h2><p>This chapter explains ba bla bla</p> <a href="#C1">See also Chapter 1</a> </body> </html>
Código JAVA: First Way
public class MainActivity extends Activity { WebView myWebView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myWebView = new WebView(this); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadUrl("file:///android_asset/chapters.html"); setContentView(myWebView); final GestureDetector gestureDetector = new GestureDetector( new MyGestureDetector()); View.OnTouchListener gestureListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } }; myWebView.setOnTouchListener(gestureListener); } class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onSingleTapConfirmed(MotionEvent e) { myWebView.reload(); Log.i("", "Reload"); return super.onSingleTapConfirmed(e); } } }
EDITAR CÓDIGO JAVA: Second Way – He intentado esta cosa onTouchListener
y que funciona bien para mí.
public class MainActivity extends Activity { WebView myWebView; public static boolean flag = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myWebView = new WebView(this); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadUrl("file:///android_asset/chapters.html"); setContentView(myWebView); myWebView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { if (url.contains("#") && flag == false) { myWebView.loadUrl(url); flag = true; } else { flag = false; } } }); } }
Para abrir la etiqueta de anclaje de otro archivo HTML de un archivo
myWebView = new WebView(this); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadUrl("file:///android_asset/1.htm"); myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { try{ chapter = url.substring(url.indexOf("#"),url.length()); url = url.substring(0,url.indexOf("#")); }catch (Exception e) { chapter = ""; } myWebView.loadUrl(url); return true; } public void onPageFinished(WebView view, String url) { if (!chapter.equalsIgnoreCase("") && flag == false) { myWebView.loadUrl(url+chapter); flag = true; } else { flag = false; } } }); setContentView(myWebView);
Intente con este código. Funciona bien .
String html = "<html><body><p><a href='#C4'>See also Chapter 4</a></p><p><h2>Chapter 1</h2><p>This chapter explains ba bla bla</p><h2>Chapter 2</h2><p>This chapter explains ba bla bla</p><h2>Chapter 3</h2><p>This chapter explains ba bla bla</p><h2><a name='C4'>Chapter 4</a></h2><p>This chapter explains ba bla bla</p><h2>Chapter 5</h2><p>This chapter explains ba bla bla</p><h2>Chapter 6</h2><p>This chapter explains ba bla bla</p><h2>Chapter 7</h2><p>This chapter explains ba bla bla</p><h2>Chapter 8</h2><p>This chapter explains ba bla bla</p><h2>Chapter 9</h2><p>This chapter explains ba bla bla</p></body></html>"; String mime = "text/html"; String encoding = "utf-8"; final WebView myWebView = (WebView)this.findViewById(R.id.webView); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadDataWithBaseURL("app:html", html, mime, encoding, null); myWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, "app:html"); view.loadDataWithBaseURL("app:html", html, mime, encoding, null); } });
Este problema ocurre en los dispositivos Android 4.0.3 y 4.0.4: Si tiene una página web móvil (ya sea en activos o cargada desde la Web) cuyo contenido se rellena en todo el ancho de la pantalla, a continuación, algunos enlaces como este:
<a href=... HTML links
…¡no trabajará! Simplemente no podrán cargar la siguiente página! Es un poco extraño.
El error se documenta aquí: http://code.google.com/p/android/issues/detail?id=929
A pesar de que se registró en 2009, todavía sucede en los dispositivos Android 4.0.3 / 4.0.4.
La solución es no utilizar:
android:layout_height="wrap_content
en el WebView.
Sustitúyalo por:
android:layout_height="match_parent
Pruebe este simple javascript de 2 líneas
<html> <body> <head> <script language="javascript"> function jump_top() { location.href = "#top"; location.hash = ""; } </script> </head> <body> <a name="top"></a> <br /><br /><br /><br /> ... <br />Now you are at the bottom of the page <br /> <a onclick="jump_top()">To Top</a> </body> </html>
- Fragmento pila trasera no funciona cuando se extiende AppCompatActivity
- Registro dinámico vs registro estático de BroadcastReceiver