open full from ejemplo activity android android-fragments fragment android-dialogfragment

android - full - dialogfragment kotlin



Cómo hacer que el ancho de DialogFragment sea Fill_Parent (12)

Hola, estoy trabajando en una aplicación de Android donde estoy usando DialogFragment para mostrar el diálogo, pero su ancho es muy pequeño. ¿Cómo puedo hacer que este ancho sea fill_parent ?

public class AddNoteDialogFragment extends DialogFragment { public AddNoteDialogFragment() { // Empty constructor required for DialogFragment } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().setTitle(getString(R.string.app_name)); View view = inflater.inflate(R.layout.fragment_add_note_dialog, container); return view; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); // request a window without the title dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); return dialog; } }

fragment_add_note_dialog.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:background="@android:color/white" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <EditText android:id="@+id/addNoteEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="top" android:hint="@string/clock_enter_add_note" android:imeOptions="actionDone" android:inputType="textCapSentences|textMultiLine" android:lines="5" /> <Button android:id="@+id/submit" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="@drawable/login_button" android:text="@string/submit_button" android:textColor="@android:color/white" /> </LinearLayout>

Gracias por adelantado.


¿Ha intentado utilizar la respuesta de Elvis de Cómo hacer que un diálogo de alerta llene el 90% del tamaño de la pantalla ?

Es el siguiente:

dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

Actualizar:

El código anterior debe agregarse dentro del método onStart() del DialogFragment .

LayoutParams.FILL_PARENT está en desuso en su lugar, utilice LayoutParams.MATCH_PARENT .


Cree un estilo personalizado en su archivo style.xml. Solo copie y pegue este código en su archivo style.xml

<style name="CustomDialog" parent="@android:style/Theme.Holo.Light" > <item name="android:windowBackground">@null</item> <item name="android:windowIsFloating">true</item> </style>

Luego, en el método createDialog de su DialogFragment, cree el objeto de diálogo por el código

dialog = new Dialog(getActivity(), R.style.CustomDialog);

Esto está funcionando para mí y espero que esto también te ayude


El usuario AlertDialog.Builder dentro de su DialogFragment. onCreateDialog en el método onCreateDialog esta manera. Y en onCreateView no hagas nada.

public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); View view = LayoutInflater.from(getContext()).inflate(R.layout.gf_confirm_order_timeout_dialog, null); final Bundle args = getArguments(); String message = args.getString(GfConstant.EXTRA_DATA); TextView txtMessage = (TextView) view.findViewById(R.id.txt_message); txtMessage.setText(message); view.findViewById(R.id.btn_confirm).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mListener != null) { mListener.onDialogConfirmOK(); } } }); builder.setView(view); Dialog dialog = builder.create(); dialog.setCanceledOnTouchOutside(false); dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); return dialog; }


En mi caso, también utilicé el siguiente enfoque:

@Override public void onStart() { super.onStart(); getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, (int) getResources().getDimension(R.dimen.dialog_height)); } }

Pero todavía había pequeños huecos entre los bordes izquierdo y derecho del diálogo y los bordes de la pantalla en algunos dispositivos Lollipop + (por ejemplo, Nexus 9).

No fue obvio, pero finalmente me di cuenta de que para hacerlo de ancho completo en todos los dispositivos y plataformas , el fondo de la ventana debe especificarse en styles.xml como el siguiente:

<style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:padding">0dp</item> <item name="android:windowBackground">@color/window_bg</item> </style>

Y, por supuesto, este estilo debe usarse cuando creamos el diálogo de la siguiente manera:

public static DialogFragment createNoTitleDlg() { DialogFragment frag = new Some_Dialog_Frag(); frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle); return frag; }


Esta es la solución que descubrí para manejar este problema:

@Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); return dialog; } @Override public void onStart() { super.onStart(); Dialog dialog = getDialog(); if (dialog != null) { dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); } }

Editar:

Puede usar el siguiente código en el método de Fragmento de onCrateView antes de devolver la vista inflada.

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));


Esto me funciona

Crea tu estilo personalizado:

<style name="DialogStyle" parent="Base.Theme.AppCompat.Dialog"> <item name="android:windowMinWidthMajor">97%</item> <item name="android:windowMinWidthMinor">97%</item> </style>

Usa este estilo en tu diálogo

public class MessageDialog extends DialogFragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogStyle); } // your code }


Otra solución que funciona para mí sin efectos secundarios fue:

En tu clase que amplía DialogFragment:

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

En tus estilos:

<style name="DialogStyle" parent="ThemeOverlay.AppCompat.Dialog.Alert"></style>


Para mí, funcionó cuando reemplacé el padre LinearLayout del diseño inflado en onCreateView por RelativeLayout. No se requiere otro cambio de código.


en su raíz de diseño, configure android: minWidth a un valor muy grande, por ej.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:minWidth="9999999dp"> ... </LinearLayout>


usa esto en el método onCreateView de DialogFragment

Display display = getActivity().getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, **220**, getResources().getDisplayMetrics()); getDialog().getWindow().setLayout(width,px);

220 es la altura del fragmento de diálogo, cámbialo como desees


<!-- A blank view to force the layout to be full-width --> <View android:layout_width="wrap_content" android:layout_height="1dp" android:layout_gravity="fill_horizontal" />

en la parte superior de mi diseño de diálogo hizo el truco.


public class FullWidthDialogFragment extends AppCompatDialogFragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_AppCompat_Light_Dialog_Alert); } }

y si desea mucha más flexibilidad puede ampliar AppCompat_Dialog_Alert y atributos personalizados