Custom FragmentDialog con esquinas redondas y no 100% de ancho de pantalla

Estoy creando un diálogo de fragmento personalizado con esquinas redondas y con un diseño que no llenaría el ancho de la pantalla (prefiero que sólo envuelve su contenido).

Este es mi rounded_dialog.xml en la carpeta rounded_dialog.xml , que es llamada por mi Custom ThemeWithCorners como fondo para el diálogo. También traté de configurarlo como fondo para el diseño lineal que crea su contenido, pero nada funciona.

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@android:color/white"/> <corners android:radius="20dp" /> </shape> 

Y así es como llamo al diálogo:

 final String FTAG = "TAG_FRAGMENT_DIALOG_CALENDAR"; dialog = (CalendarDialog) fm.findFragmentByTag(FTAG); ft = fm.beginTransaction(); if (dialog != null) { ft.remove(dialog); } dialog = CalendarDialog.newInstance(this); dialog.setCancelable(true); ft.add(dialog, FTAG); ft.show(dialog); ft.commit(); 

En el método onCreate del diálogo establezco el estilo y el tema:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NO_TITLE, R.style.ThemeWithCorners); } 

Este es el método onCreateView:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().setCanceledOnTouchOutside(true); v = (MyCalendar)inflater.inflate(R.layout.calendar_dialog, container, true) return v; } 

También traté de añadir esto al método onCreateDialog como otras respuestas en SO sugerido pero tampoco funcionó:

 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog d = super.onCreateDialog(savedInstanceState); LayoutParams lp=d.getWindow().getAttributes(); d.getWindow().setBackgroundDrawable(new ColorDrawable(0)); lp.width=-2;lp.height=-2;lp.gravity=Gravity.CENTER; lp.dimAmount=0; lp.flags=LayoutParams.FLAG_LAYOUT_NO_LIMITS | LayoutParams.FLAG_NOT_TOUCH_MODAL; return d; } 

Así que para resumir, quiero esquinas redondas, no el ancho del 100% de la pantalla, que preferiblemente debe envolver su contenido. Por favor, por favor, necesito ayuda, estoy realmente desesperada por esto, ¡he estado intentándolo durante días!

Bueno, acabo de encontrar una solución, pero no estoy muy contento con eso.

Puse el fondo (rounded_dialog.xml) para el diálogo como esto:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/transparent"/> <corners android:radius="10dp" /> <padding android:left="10dp" android:right="10dp"/> </shape> 

Entonces fijé esto a mi diálogo en su método del'onCreateView 'esta manera abajo. Las esquinas redondeadas no son realmente necesarias en este pedazo de código, ya que el fondo es transparente, pero el relleno es importante, porque el diálogo sigue siendo de hecho tan amplio como la pantalla, pero el relleno hace que parezca que no lo es.

 getDialog().getWindow().setBackgroundDrawableResource(R.drawable.rounded_dialog); 

Y, al final, establezco el fondo de los componentes del diálogo a otro dibujable a medida que hace que las esquinas giren. Tengo un LinearLayout con RelativeLayout en la parte superior y TextView en la parte inferior, por lo que establezco @null a los padres LinearLayout y establecer dos diferentes drawables personalizados a las dos partes, una de las cuales ha redondeado bottomCorners y el otro topCorners.

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/title_round" > <RelativeLayout android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:background="@drawable/blue_title_round_top" android:paddingTop="4dp" android:paddingBottom="4dp" > <TextView android:id="@+id/calendarHint" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/rounded_bottom" android:layout_gravity="center" android:gravity="center" /> </LinearLayout> 

Creo que hay una solución más adecuada a esto, ya que esto es correcto sólo visualmente, no funcionalmente, pero lo suficientemente correcto para este caso.

Fondo de diálogo: dialog_rounded_bg.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/white" /> <corners android:radius="12dp" /> </shape> 

Diseño del dialog_rounded.xml diálogo: dialog_rounded.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/dialog_rounded_bg" android:minWidth="260dp" android:orientation="vertical" android:padding="24dp"> ... </LinearLayout> 

Fragmento de diálogo: RoundedDialog.java

 public class RoundedDialog extends DialogFragment { ... @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_rounded, container, false); // Set background transparent getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); return view; } ... } 

Diálogo redondeado

  • Android - DialogFragment con diseño que contiene fragmento
  • ¿Cómo conservar el oyente en el cuadro de diálogo personalizado abierto desde el fragmento?
  • Prueba de DialogFragments con Robolectric
  • Posición de DialogFragment en Android
  • Disposición de esquina redonda de Android en el cuadro de diálogo
  • Pasar un objeto a fragmento o DialogFragment a la instancia
  • StackOverflowError al intentar inflar un diseño personalizado para un AlertDialog dentro de un DialogFragment
  • Abrir un DialogFragment desde dentro de un CustomView
  • Cómo crear un cuadro de diálogo personalizado en android?
  • Deshabilitar el botón positivo / negativo en DialogFragment
  • Recuperar valor de EditText en DialogFragment
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.