Cómo hacer el ancho de DialogFragment a Fill_Parent
Hola Estoy trabajando en una aplicación de Android donde estoy utilizando DialogFragment
para mostrar el diálogo, pero su ancho es muy pequeño. ¿Cómo puedo hacer este ancho para fill_parent
a él?
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
- ViewPager onClickListener hace referencia a la vista errónea en android
- Mostrar Android DialogFragment como diálogo en modo vertical y como parte de la actividad en modo horizontal
- Cargar imagen desde la cámara a ImageView en un fragmento
- Android.view.InflateException: Línea de archivo XML binario # 2: Error al inflar fragmento de clase
- Fragmento de actualización de ViewPager en el dispositivo
<?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.
- Viewpageindicator dentro del fragmento
- Animador de animación personalizada
- RecyclerView no se actualiza después de NotifyDataSetChanged (), el contenido aparece después de encender y apagar la pantalla
- Utilizar la misma clase de Fragmento dos veces en diferentes contenedores
- Error "java.lang.IllegalStateException: No se puede cambiar la etiqueta de fragmento" cuando se utiliza ViewPager # setCurrentItem ()
- Cómo encontrar listview en 'fragmento'
- Fragmento reemplazado aún visible
- Android Refreshing Fragment View después de AsyncTask
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 utilizar el código siguiente 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));
¿Ha intentado usar 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:
Por encima del código debe agregarse dentro del método onStart()
del DialogFragment
.
LayoutParams.FILL_PARENT
está en desuso utilizar LayoutParams.MATCH_PARENT
.
Esto funciona para mí
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>
Utilice este estilo en su 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 }
<!-- 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 esquema de diálogo hizo el truco.
Para mí, funcionó cuando reemplazé al padre LinearLayout del diseño inflado en onCreateView por RelativeLayout. No se requiere ningún otro cambio de código.
En mi caso también usé el siguiente enfoque:
@Override public void onStart() { super.onStart(); getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, (int) getResources().getDimension(R.dimen.dialog_height)); } }
Pero aún quedaban pequeños espacios entre los bordes izquierdo y derecho del cuadro de diálogo y los bordes de la pantalla en algunos dispositivos Lollipop + (por ejemplo, Nexus 9).
No era obvio, pero finalmente me di cuenta de que para que sea de ancho completo a través de todos los dispositivos y el fondo de la ventana de plataformas se debe especificar dentro 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 utilizarse cuando creamos el cuadro de 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; }
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 extender AppCompat_Dialog_Alert y atributos personalizados
Utilizar 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ámbiela como desees
Usuario AlertDialog.Builder dentro de su DialogFragment. Añadir en el método onCreateDialog
como este. Y en onCreateView
no hacer 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; }
Cree un estilo personalizado en su archivo style.xml. Simplemente copie 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>
A continuación, 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 te ayude también
- Cómo reemplazar el método a través del atajo de teclado en Android Studio
- ¿Cuál es la diferencia entre AppBarLayout vs barra de herramientas?