Saltar al contenido

FragmentDialog personalizado con esquinas redondeadas y sin ancho de pantalla al 100%

La guía o código que encontrarás en este post es la solución más fácil y válida que encontramos a tus dudas o dilema.

Solución:

Fondo del diálogo:dialog_rounded_bg.xml



    
    

Disposición del diálogo:dialog_rounded.xml



    ...

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 transparent background and no title
        if (getDialog() != null && getDialog().getWindow() != null) 
            getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        
        return view;
    
    ...

Diálogo redondeado

Actualizar: Si no pones la bandera Window.FEATURE_NO_TITLE, aparece una línea azul en la parte superior del cuadro de diálogo en dispositivos con Android ≤ 4.4.

Bueno, acabo de encontrar una solución, aunque no estoy muy contento con ella.

Configuré el fondo (round_dialog.xml) para el cuadro de diálogo de esta manera:






Luego configuré esto en mi diálogo en su método ´onCreateView´ de esta manera a continuación. Las esquinas redondeadas no son realmente necesarias en este fragmento de código ya que el fondo es transparente, pero el relleno es importante, porque el diálogo sigue siendo tan ancho como la pantalla, pero el relleno hace que parezca que no lo es.

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

Y al final configuré el fondo de los componentes del diálogo en otro elemento de diseño personalizado que redondea las esquinas. Tengo un LinearLayout con RelativeLayout en la parte superior y TextView en la parte inferior, así que configuro @null al LinearLayout principal y establezca dos elementos de diseño personalizados diferentes en las dos partes, una de las cuales tiene bottomCorners redondeadas y la otra topCorners.






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

De otra manera:

Usar setStyle() en onCreate() método para aplicar un estilo para usted DialogFragment.
Entonces, puedes usar android:background lo mismo que siempre en el vista raíz de your_layout.xml Archivo.


Pasos:

  1. style.xml presentar en res carpeta):

  1. Crear your_layout.xml archivo en el carpeta de diseño:


    ...

  1. Crear bg_corner_dialog.xml archivo en el carpeta dibujable:


    
    

  1. Finalmente aplicar style y layout a la tu DialogFragment:
public class CustomDialogFragment extends DialogFragment 
    ...

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_TITLE, R.style.DialogTheme_transparent);
        ...
    

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
        View v = inflater.inflate(R.layout.your_layout, container, false);
        ButterKnife.bind(this, v);
        //init UI Elements...
        return v;
    


Espero que esto te ayude.
Los mejores deseos

Recuerda que tienes autorización de interpretar si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *