AlertDialog llama WebView



Nuestro es objetivo es apretar un botón y nos aparezca esta pantalla.
La pregunta que nos podríamos de hacer antes de seguir, para que usar un alertDialog y no hacer una simple llamada
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("www.google.com.ar")));

La respuesta es simple, porque con la línea de código anterior, SALIMOS de nuestra aplicación para entrar al navegador (chrome) y entrar a www.google.com.ar (o cualquier otra url que nosotros pongamos).
Y eso es un problema, si el usuario sale de nuestra app, es muy posible que no vuelva, porque a lo mejor ya se engancha con otra cosa y después otra y se fue.
La idea siempre es que este en la app y nunca salga, a menos que intencionalmente quiera hacerlo.

Entonces, para ello vamos a llamar "navegador" pero sin salirnos de nuestro app. Esto es muy parecido a lo que hace Fabook, cuando clickeamos en las fotos, llama a un alert vemos las foto, y cuando apretamos escape, volvemos a donde estabamos.

Lo que tenemos que hacer llamar a esta función
webViewResultados(); 

Código:
private void webViewResultados() {
        AlertDialog.Builder alert = new AlertDialog.Builder(
                getApplicationContext());
        //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        //alert.setTitle("Resultados Salomon k21");

        WebView wv = new WebView(getApplicationContext());
        wv.getSettings().setJavaScriptEnabled(true);
        wv.loadUrl("https://docs.google.com/spreadsheets/d/1VvjXWpiQWvxH7iD9E4g0dq0Fm-JeV_Sm1y-_afDAb5Q/pubhtml");
        wv.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view,
                                                    String url) {
                view.loadUrl(url);

                return true;
            }
        });

        alert.setNegativeButton("Close",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                    }
                });
        Dialog d = alert.setView(wv).create();
        d.show();
        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
        lp.copyFrom(d.getWindow().getAttributes());
        lp.width = WindowManager.LayoutParams.FILL_PARENT;
        lp.height = WindowManager.LayoutParams.FILL_PARENT;
        d.getWindow().setAttributes(lp);
    }

Si tienen problemas con el redimensionamiento verticual cuando rotan la pantalla pueden comentar
//                lp.height = WindowManager.LayoutParams.FILL_PARENT;

Ejemplo completo
Prueba.java
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.WindowManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

public class Prueba extends ActionBarActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.prueba);
        //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        Button btnPrueba = (Button) findViewById(R.id.buttonPrueba);
        btnPrueba.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder alert = new AlertDialog.Builder(
                        Prueba.this);
                //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                //alert.setTitle("Resultados Salomon k21");

                WebView wv = new WebView(Prueba.this);
                wv.getSettings().setJavaScriptEnabled(true);
                wv.loadUrl("https://docs.google.com/spreadsheets/d/1VvjXWpiQWvxH7iD9E4g0dq0Fm-JeV_Sm1y-_afDAb5Q/pubhtml");
                wv.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view,
                                                            String url) {
                        view.loadUrl(url);

                        return true;
                    }
                });

                alert.setNegativeButton("Close",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                            }
                        });
                Dialog d = alert.setView(wv).create();
                d.show();
                WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
                lp.copyFrom(d.getWindow().getAttributes());
                lp.width = WindowManager.LayoutParams.FILL_PARENT;
//                lp.height = WindowManager.LayoutParams.FILL_PARENT;
                d.getWindow().setAttributes(lp);
            }
        });

        //WebView myWebView = (WebView) findViewById(R.id.webView);
        //myWebView.loadUrl("https://amatellanes.wordpress.com/");

    }
}

prueba.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/buttonPrueba" />
</LinearLayout>

No se olviden de habilitar conexiones de internet en el AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />

Nota: Si les sale el error
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

cambien el
getApplicationContext()

por el nombre de la clase.this por ejemplo
Prueba.this

10 comentarios:

  1. disculpa y si quisiera ver una lista de los videos de youtube pero sin entrar en internet,alguna forma??

    ResponderEliminar
  2. Podes descargarlos con aTube Catcher

    ResponderEliminar
  3. Como llamo este layout prueba.xml desde el main?

    ResponderEliminar
  4. hola. quisiera saber como se hace para colocar un link en un alert dialog pero no quiero colocar etiquetas de html, mi idea es hacer funcionar un link que obtengo desde un metodo ejemplo p.getPortaWeb este lo que hace es traer la url desde un webservice. quiero hacer funcionar ese link cuando le de clic en el enlace que aparece en el alert dialog.
    gracias de ante mano.

    ResponderEliminar
  5. Hola quisiera saber como crear un archivo excel desde mi app con diferentes datos.

    Muchas gracias.

    ResponderEliminar
  6. Buena tarde Tara Chandra estoy haciendo un proyecto tengo la BD altas bajas cambios, mod, requiero una linea de comando que haga una funcion cuanto me cobras, de antemano gracias.

    ResponderEliminar
  7. POR FAVOR LEA !! Hola chicos !!! Soy Caro, vivo en Ohio, EE. UU. Tengo 32 años, estoy muy feliz de haber recibido mi tarjeta de cajero automático en blanco de Adriano. Mi tarjeta de cajero automático en blanco puede retirar $ 4,000 por día. Lo obtuve de Él la semana pasada y ahora he retirado alrededor de $ 10,000 gratis. El cajero automático en blanco retira dinero de cualquier cajero automático y no tiene nombre porque está en blanco, solo su PIN estará en él, no se puede rastrear y ahora tengo dinero para negocios, compras y suficiente dinero para mí y mi familia. vivo. Estoy muy contento y feliz de haber conocido a Adriano porque conocí a cinco personas antes que él y no pudieron ayudarme. Pero estoy feliz ahora que Adriano envió la tarjeta a través de DHL y la recibí en dos días. Obtenga su propia tarjeta de él en este momento, la está dando por una pequeña tarifa para ayudar a las personas, incluso si es ilegal, pero ayuda mucho y nadie es atrapado o rastreado. Estoy feliz y agradecido con Adriano porque cambió mi historia de repente. La tarjeta funciona en todos los países. Es una buena noticia. La dirección de correo electrónico de Adriano es adrianohackers01@gmail.com

    ResponderEliminar
  8. POR FAVOR LEA !! Hola chicos !!! Soy Caro, vivo en Ohio, EE. UU. Tengo 32 años, estoy muy feliz de haber recibido mi tarjeta de cajero automático en blanco de Adriano. Mi tarjeta de cajero automático en blanco puede retirar $ 4,000 por día. Lo obtuve de Él la semana pasada y ahora he retirado alrededor de $ 10,000 gratis. El cajero automático en blanco retira dinero de cualquier cajero automático y no tiene nombre porque está en blanco, solo su PIN estará en él, no se puede rastrear y ahora tengo dinero para negocios, compras y suficiente dinero para mí y mi familia. vivo. Estoy muy contento y feliz de haber conocido a Adriano porque conocí a cinco personas antes que él y no pudieron ayudarme. Pero estoy feliz ahora que Adriano envió la tarjeta a través de DHL y la recibí en dos días. Obtenga su propia tarjeta de él en este momento, la está dando por una pequeña tarifa para ayudar a las personas, incluso si es ilegal, pero ayuda mucho y nadie es atrapado o rastreado. Estoy feliz y agradecido con Adriano porque cambió mi historia de repente. La tarjeta funciona en todos los países. Es una buena noticia. La dirección de correo electrónico de Adriano es adrianohackers01@gmail.com

    ResponderEliminar
  9. Después de graduarme de la universidad no había trabajo, así que decidí tener una pequeña empresa, pero el dinero no era suficiente, cerré la empresa, se puso muy difícil para mí, era el único hijo de mis padres y mis padres. Ambos son viejos, confían en mí para la nutrición diaria, un día, mientras navegaba por Internet, vi una publicación sobre cómo esta NUEVA TARJETA DE ATM EN BLANCO PROGRAMADA puede piratear un cajero automático y retirar una gran cantidad de dinero, así que me comuniqué con la empresa a través de su correo electrónico. Para mi mayor sorpresa, recibí la tarjeta unos días después de pagar una pequeña tarifa por la tarjeta. Esa tarjeta de cajero automático en blanco es un producto excelente y maravilloso. Nunca hubiera creído que podría adquirir todas estas cosas que tengo hoy con esta gran alegría en mi corazón, por eso les estoy compartiendo la buena noticia ... La vida se trata de ser positivo y paciente, en la fe de que las grandes cosas son posibles y puede suceder en segundos ... BRAIN HACKERS TECH WORLD ha cambiado mi vida ... Gracias a Dios puedes enviar un correo electrónico a VIA ( brainhackers @ aol . com ).

    ResponderEliminar