Estoy tratando de construir un AlertDialog con una costumbre view (sin título o pie de página) y con esquinas redondeadas. He visto un montón de posts sobre cómo hacerlo y lo he intentado un montón de cosas, pero creo que no se puede construir como quiero.

Este es mi meta:

Android: AlertDialog con vista personalizada y con esquinas redondeadas

He creado un drawable para la dialog llamado dialog_background.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid
        android:color="#FFAAAAAA" />

    <stroke
        android:width="2dp"
        android:color="#FF000000" />

    <corners android:radius="20dp" />
</shape>

Y he añadido un style a utilizar:

<style name="MyDialog" parent="@android:style/Theme.Dialog">
    <item name="android:background">@drawable/dialog_background</item>
</style>

La layout de mi costumbre view va a tener dos botones. Ahora os muestro un vacío LinearLayout para hacerlo simple. Este es playdialog.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    style="@style/MyDialog"
     >

</LinearLayout>

Para construir el Dialog yo uso un DialogFragment. Este es su onCreateDialog función:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    builder.setView(inflater.inflate(R.layout.playdialog, null));
    return builder.create();
}

Ok, si puedo usar el código como el que tengo esta:

Android: AlertDialog con vista personalizada y con esquinas redondeadas

He tratado de establecer el dialog fondo transparente de la modificación de mi DialogFragment código:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    builder.setView(inflater.inflate(R.layout.playdialog, null));

    **NEW**        

    Dialog d = builder.create();
    d.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    return d; 
}

El resultado es exactamente el mismo, entonces me di cuenta de que ese rectángulo blanco en mi dialog es de mi costumbre view, no de la dialog. Ya estoy estableciendo mi view‘s fondo de dialog_background.xml así que yo no puedo configurarlo para que transparente demasiado o me sueltas las esquinas, color, etc.

Entonces me decidí a modificar la dialog‘s fondo de usar dialog_background.xml y tener mi opinión, tienen un color sólido como fondo.

En mi costumbre view layout (playdialog.xml) que sustituyó a style=»@style/MyDialog» con:

android:background="#FFAAAAAA"

Y, a continuación, en mi DialogFragment he utilizado este código:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    builder.setView(inflater.inflate(R.layout.playdialog, null));

    **NEW**        

    Dialog d = builder.create();
    d.getWindow().setBackgroundDrawableResource(R.drawable.dialog_background);
    return d; 
}

Esto es lo que obtengo:

Android: AlertDialog con vista personalizada y con esquinas redondeadas

Es casi lo que yo quería, pero usted puede ver mi costumbre view fronteras, por lo que no es suficientemente bueno. En este momento yo no sabía qué otra cosa podía yo hacer.

Alguien sabe cómo puedo solucionarlo?

Gracias!

podría solucionar el problema? Con esquinas redondeadas, yo no soy capaz de eliminar el blanco de las secciones de la corder

OriginalEl autor PX Developer | 2013-03-02

4 Comentarios

  1. 5

    Acabo de crear un alerta personalizada de diálogo. Pero sus esquinas no redondeadas.

    Primero crear un diseño para como –

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="240sp"
    android:layout_height="wrap_content"
    android:background="#FFFFFF"
    tools:ignore="SelectableText" >
    <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="1sp"
    tools:ignore="UselessParent" >
    <TableLayout 
    android:id="@+id/tablelayout_dialog_title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:stretchColumns="1" >
    <TableRow
    android:id="@+id/tablerow_dialog_title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"            
    tools:ignore="UselessParent" >
    <ImageView 
    android:id="@+id/imageview_dialog_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/alertwhite" 
    android:layout_gravity="center"
    android:background="#643c3a"
    android:contentDescription="@string/string_todo"/>
    <TextView
    android:id="@+id/textview_dialog_title"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent" 
    android:background="#643c3a"
    android:padding="10sp"
    android:gravity="center_vertical"
    android:textColor="#FFFFFF"
    android:textSize="15sp" />
    </TableRow>     
    </TableLayout>
    <View 
    android:id="@+id/viewline_dialog"
    android:layout_below="@+id/tablelayout_dialog_title"
    android:layout_width = "wrap_content" 
    android:layout_height="0.25dip"
    android:background="#ffffff"          
    android:layout_centerVertical ="true" />
    <TextView
    android:id="@+id/textview_dialog_text"
    android:layout_below="@+id/viewline_dialog"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="8sp"
    android:background="#643c3a"
    android:textColor="#FFFFFF"
    android:textSize="12sp" />
    <View 
    android:id="@+id/viewline1_dialog"
    android:layout_width = "wrap_content" 
    android:layout_height="0.5dip"
    android:background="#ffffff"          
    android:layout_centerVertical ="true" 
    android:layout_below="@+id/textview_dialog_text"/>
    <TableLayout 
    android:id="@+id/tablelayout_dialog_button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:stretchColumns="*"
    android:layout_below="@+id/viewline1_dialog"
    android:background="#a8a8a8" >
    <TableRow
    android:id="@+id/tablerow_dialog_button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"            
    tools:ignore="UselessParent" >
    <Button
    android:id="@+id/button_dialog_yes"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8sp"
    android:paddingTop="5sp"
    android:paddingBottom="5sp"
    android:background="@drawable/roundedcornerbuttonfordialog_shape"
    android:text="@string/string_yes" />
    <Button
    android:id="@+id/button_dialog_no"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8sp"
    android:paddingTop="5sp"
    android:paddingBottom="5sp"
    android:background="@drawable/roundedcornerbuttonfordialog_shape"
    android:text="@string/string_no" />
    </TableRow>
    </TableLayout>
    </RelativeLayout>

    Ahora escribir el código de diálogo como –

    public static void callAlert(String message, final Context context){
    final Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.customdialog_layout);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));               
    TextView tvTitle = (TextView) dialog.findViewById(R.id.textview_dialog_title);
    tvTitle.setText("MyApp..");
    TextView tvText = (TextView) dialog.findViewById(R.id.textview_dialog_text);
    tvText.setText(message);    
    Button buttonDialogYes = (Button) dialog.findViewById(R.id.button_dialog_yes);
    buttonDialogYes.setOnClickListener(new OnClickListener() {          
    public void onClick(View v) {
    //Do your stuff...
    dialog.dismiss();
    }
    });
    Button buttonDialogNo = (Button) dialog.findViewById(R.id.button_dialog_no);
    buttonDialogNo.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    //Do your stuff...
    dialog.dismiss();
    }           
    });
    dialog.show();
    }

    Y llamar a este método como –

    String message = "Your Message";
    callAlert(message, callingClass.this);

    Espero que esto le ayudará.

    Utilizando un cuadro de Diálogo en lugar de AlertDialog, como lo hizo, resuelto el problema. Gracias! 😀
    De la OMI, yo no usaría un TableLayout a intentar hacer el formateo. Yo me quedaría Lineal, Relativa, y el Marco. El aplanamiento de la vista de la jerarquía de aumentar el rendimiento.

    OriginalEl autor Manoj Fegde

  2. 0

    El código de abajo, resuelto el problema

    MyDialog mydialog = new MyDialog(this, "for testing",
    new myOnClickListener() {
    @Override
    public void onPositiveButtonClick() {
    //TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(),
    "I am positive button in the dialog",
    Toast.LENGTH_LONG).show();
    }
    @Override
    public void onNegativeButtonClick() {
    //TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(),
    "I am negative button in the dialog",
    Toast.LENGTH_LONG).show();
    }
    });
    //this will remove rectangle frame around the Dialog
    mydialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
    mydialog.show();

    Gracias,
    Nagendra

    no eliminar el blanco de las secciones en el orden 🙁

    OriginalEl autor Anisetti Nagendra

  3. -1

    ¿por qué no utilizar la imagen que está mostrando como «Esta es mi meta:» salvar su meta bg imagen en la carpeta de dibujable.

    private AlertDialog createAlertDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(getLayoutInflater().inflate(R.layout.playdialog, null));
    return builder.create();
    }  

    luego

    AlertDialog dialog = createAlertDialog();
    dialog.show();
    el uso de imágenes no es recomendable por razones tales como la escalabilidad, y computacional de la re-el tiempo de procesamiento y un consumo de energía innecesario de la misma.

    OriginalEl autor umesh

Dejar respuesta

Please enter your comment!
Please enter your name here