¿Cómo configurar un cuadro de aviso emergente en WebView que admita funciones de recordatorio, confirmación y aviso de js?
Los siguientes son tres métodos para anular WebChromeClient:
OnJsAlert: cuadro de advertencia (la advertencia en WebView no es válida y debe personalizarse para que aparezca WebChromeClient).
OnJsPrompt: cuadro de aviso.
OnJsConfirm: casilla Aceptar.
Las representaciones son las siguientes:
1. Alarma
2. Primero, echemos un vistazo al código de la página js:
& lthtml & gt
& lthead & gt
& ltmeta ejemplo de vista web. ;
Importar Android.app.activity;
Importar el cuadro de diálogo Android.app.alert;
Importar la interfaz Android.content.dialog;
Importar Android.bundle;
Importar Android.view.view;
Importar Android.WebKit.jsprompt resultado;
Importar Android.WebKit. js resultado;
p>
Importar Android . WebKit cliente;
Importar Android WebKit .
Importar Android.widget.edittext;
Importar Android.widget.textview;
/**
* Creado. por mChenys el 19/11/2015.
*/
La clase pública TestAlertActivity extiende la actividad {
@Override
Nulo protegido al crear (estado de instancia guardado del paquete){
super .oncreate(savedInstanceState);
WebView webView = new WebView(this);
setContentView(webView);
enfoque de solicitud de vista web. ();
configuración web = webview.get settings();
setjavascript enable(true); //Habilitar soporte js
// Configure la función Alert() para responder a js.
webview . setwebchromeclient(new WebChromeClient(){
@override
public boolean onJsAlert(vista WebView, URL de cadena, mensaje de cadena, resultado final de JsResult){
Constructor b = nuevo constructor AlertDialog(testalertactivity.this);
b.settitle("Alerta");
b.setMessage(message);
b.setPositiveButton(Android.R.string.ok, crea un nuevo DialogInterface.OnClickListener() {
@Override
public void onClick(diálogo de interfaz de diálogo, int cual) {
resultado.confirm().
}
});
b.setcancelable(false);
b.create().show();
Devuelve verdadero
}
//Establece la función Confirm() en respuesta a js.
@Override
public boolean onJsConfirm(vista WebView, URL de cadena, mensaje de cadena, resultado final de JsResult){
AlertDialog.Builder b = Nuevo AlertDialog.Builder(testalertactivity.this);
b.setTitle("Confirmar");
b. setMessage(mensaje);
b.setPositiveButton( Android.R.string.ok, crea un nuevo DialogInterface.OnClickListener() {
@Override
public void onClick (diálogo de interfaz de diálogo, int cual) {
resultado.confirm().
}
});
b.setNegativeButton (Android.R.string.cancel, nuevo DialogInterface.OnClickListener(). {
@Override
public void onClick(diálogo de interfaz de diálogo, int cual) {
resultado .
}
});
b.create(). show();
Devuelve verdadero
}
// Configure la función Prompt() para responder a js.
@Override
onJsPrompt booleano público (vista WebView, URL de cadena, mensaje de cadena, valor predeterminado de cadena, resultado final de jspromptsultresult) {
Vista final v = Ver. inflar(testalertactivity . this, R.layout.prompt_dialog, null);
((TextView)v . findviewbyid(r . id . Prompt_message_text)).
setText(mensaje);
((EditText)v . findviewbyid(r . id . solicitud _ entrada _ campo)). setText(predeterminado);
Cuadro de diálogo de alerta. generador b = nuevo diálogo de alerta. Constructor(testalertactivity.this);
b.setTitle("tip");
b.set view(v);
b.setPositiveButton( Android R.string.ok, nuevo OnClickListener() {
@override
public void onClick(diálogo de interfaz de diálogo, int cual) {
Valor de cadena =. ((EditText)v . findviewbyid(r . id . solicitud _ entrada _ campo)). getText()
ResultConfirm(valor
}
});
b.setNegativeButton(Android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override p>
public void onClick( diálogo interfaz diálogo, int cual) {
resultado cancel();
}
});
p>b. crear(). show();
Devuelve verdadero
}
});
webview loadurl(" file:///Android _. activo/índice 3. html ");
}
}
Hay dos cosas a tener en cuenta:
1. Importante para Al escribir el método onJsPrompt, necesitamos personalizar un archivo de diseño de aviso, como se muestra a continuación: Prompt_dialog.xml
Es solo un TextView de aviso y un EditTex de texto de entrada.
[html]Ver texto sin formato
& lt? versión xml = "1.0" codificación = "utf-8"? & gt
& ltLinearLayout xmlns:android= " "
Android:layout _ width = " match _ parent "
Android:layout _ height = " match _ parent "
Android:orientación = " vertical " & gt;
& lttext view
Android:id = " @+id/prompt _ mensaje _ text "
Android:layout _ width = " match _ parent "
Android:layout _ height = " wrap _ content "/& gt;
& ltEditar texto
Android:id = " @+id/prompt _ input _ field "
Android:layout _ width = " match _ parent "
Android :layout _ height = " wrap _ content "
android:minWidth="250dp "
android:selectAllOnFocus="true "
Android:desplazarse horizontalmente = " verdadero "/& gt;
& lt/diseño lineal & gt;
2. WebView necesita ser compatible con js, recuerde agregar compatibilidad con js.
configuración web = vista web .obtener configuración();
configuración setjavascript habilitada