EDITAR – SOLUCIÓN:

Me terminó de encontrar una manera de resolver este problema. Porque cambiar manualmente la altura de la ImageView quita el relleno adicional, terminé hallar las dimensiones de la imagen original, y aplicarlos a la ImageView una vez que el ImageView dimensiones pueden ser calculados. Aquí está el resultado final:

Mostrar AlertDialog con ImageView sin ningún tipo de relleno

Esta es la versión final del código de trabajo:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setPositiveButton("Get Pro", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        }).setNegativeButton("No thanks", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        final AlertDialog dialog = builder.create();
        LayoutInflater inflater = getLayoutInflater();
        View dialogLayout = inflater.inflate(R.layout.go_pro_dialog_layout, null);
        dialog.setView(dialogLayout);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        dialog.show();

        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface d) {
                ImageView image = (ImageView) dialog.findViewById(R.id.goProDialogImage);
                Bitmap icon = BitmapFactory.decodeResource(context.getResources(),
                        R.drawable.whygoprodialogimage);
                float imageWidthInPX = (float)image.getWidth();

                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(Math.round(imageWidthInPX),
                        Math.round(imageWidthInPX * (float)icon.getHeight() / (float)icon.getWidth()));
                image.setLayoutParams(layoutParams);


            }
        });

Y XML:

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

    <ImageView
        android:id="@+id/goProDialogImage"
        android:layout_width="wrap_content"
        android:layout_height="350dp"
        android:src="@drawable/whygoprodialogimage"/>

</LinearLayout>

PREGUNTA ORIGINAL:

Mi objetivo es tener un AlertDialog que tiene un ImageView que ocupa todo el diálogo, la retención de sus dimensiones, además de dos botones. Mediante la implementación a través de los métodos estándar, se tiene el siguiente aspecto:

Mostrar AlertDialog con ImageView sin ningún tipo de relleno

Estoy tratando de eliminar el relleno por encima y por debajo de ella. Aquí está el código de cómo se configure:

Diseño:

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

    <ImageView
        android:id="@+id/goProDialogImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/whygoprodialogimage"/>

</LinearLayout>

Código:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setPositiveButton("Get Pro", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        }).setNegativeButton("No thanks", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        AlertDialog dialog = builder.create();
        LayoutInflater inflater = getLayoutInflater();
        View dialogLayout = inflater.inflate(R.layout.go_pro_dialog_layout, null);
        dialog.setView(dialogLayout);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        dialog.show();

Después de mirar esta respuesta de StackOverflow, traté de implementar la solución, porque su problema parecía similar, pero a pesar de que está más cerca de lo que quiero ahora el resultado se parece a esto:

Mostrar AlertDialog con ImageView sin ningún tipo de relleno

Así se elimina el relleno, pero la imagen se ve acorralado. Aquí está el código para esta solución potencial aplicación:

¿Qué es lo que está provocando que la imagen que ahora mira aplastado? Se puede decir que se deshizo de la extra de relleno, pero las dimensiones de la imagen se ha cambiado.

Usted es capaz de mostrar la imagen correctamente mediante el cálculo de la anchura y la especificación de la altura estática de 350dp para la vista de la imagen. Pero puede no ser adecuado para todo tipo de imagen. Esto produciría un error en escenarios donde la imagen es horizontal o menor que la altura especificada. Es mejor proporcionar dinámico de altura también para la vista de la imagen. Además te gustaría tener un límite en el máximo de la anchura y altura de la imagen puede tomar.
En lugar de editar su pregunta se debe publicar una respuesta y aceptarlo para que otros no pierde su tiempo. 😛

OriginalEl autor AggieDev | 2015-01-14

8 Comentarios

  1. 14

    Me terminó de encontrar una manera de resolver este problema. Porque cambiar manualmente la altura de la ImageView quita el relleno adicional, terminé hallar las dimensiones de la imagen original, y aplicarlos a la ImageView una vez que el ImageView dimensiones pueden ser calculados. Aquí está el resultado final:

    Mostrar AlertDialog con ImageView sin ningún tipo de relleno

    Esta es la versión final del código de trabajo:

    Y XML:

    funciona bien!!!
    se añada después de mostrar el método, cómo se debe trabajar.

    OriginalEl autor AggieDev

  2. 7

    Podría ser tarde, pero creo que la configuración de android:adjustViewBounds = "true" en el ImageView podría ayudar. También, por lo general establecer android:scaleType = "centerInside" o android:scaleType = "centerCrop"

    android:adjustViewBounds = «true» trabajó para mí.
    hacerlo mediante programación también funciona

    OriginalEl autor Jofre Mateu

  3. 1

    Por favor, configure su punto de vista del LinearLayout atributo es decir,android:layout_height="match_parent". La esperanza de que funcione.

    Lamentablemente, esto no cambia nada.

    OriginalEl autor Raj Karekar

  4. 1

    Tanto de su diseño y de la imagen vista de haber layout_width="match_parent". Esto le dice a la vista (ya sea en el diseño o en la vista de la imagen) para estirar a sí mismo por lo que se llena el contenedor primario. Trate de cambiar esta propiedad para wrap_content. Usted puede encontrar una explicación detallada de la propiedad en la documentación oficial – aquí

    Ajuste a wrap_content debe tener el mismo efecto que la altura debe ser lo suficientemente anchos como para dibujar el contenido (la imagen en este caso) en lugar de la fijación de su tamaño (para que el padre/contenedor)

    He cambiado tanto a wrap_content, sigue siendo la misma.

    OriginalEl autor stan0

  5. 1

    Aquí están algunas cosas que usted puede intentar. Intenta variaciones de este para ver si se corrige el punto de vista de relación. Descripción

    o, posiblemente, la configuración manual de la ImageView manualmente el tamaño será de ayuda.

    Si no, hay un par de otras maneras, estas fueron sólo la primera que me vino a la mente.

    OriginalEl autor a54studio

  6. 1

    No estoy muy seguro, pero creo que es el tipo de cuadro de diálogo que se muestran en la que añade el relleno. Este tipo de diálogo no ocultar la totalidad de la actividad. Lo que yo uso para ocultar la totalidad de la actividad es:

    Que probablemente podría encontrar una opción que hace lo que usted necesita. Sin embargo, usted necesita para crear una presentación con los botones y la imagen en caso de que desee utilizar el método anterior.

    Compruebe las opciones de salida: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html

    Esto terminó por no ser el problema, la solución está ahora en la parte superior.

    OriginalEl autor Orion

Dejar respuesta

Please enter your comment!
Please enter your name here