Как сделать ширину DialogFragment для Fill_Parent

Привет, я работаю над приложением Android, где я использую DialogFragment для отображения диалогового окна, но его ширина очень мала. Как я могу сделать эту ширину для 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> 

Введите описание изображения здесь

Заранее спасибо.

Solutions Collecting From Web of "Как сделать ширину DialogFragment для Fill_Parent"

Это решение, которое я решил решить эту проблему:

 @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)); } } 

Редактировать:

Вы можете использовать код ниже в методе onCrateView для фрагмента, прежде чем вернуть завышенное представление.

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

Пробовали ли вы использовать ответ Элвиса? Как сделать диалоговое окно оповещения заполнить 90% размера экрана ?

Это следующее:

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

Обновить:

Выше код должен быть добавлен внутри onStart() DialogFragment .

LayoutParams.FILL_PARENT устарел использовать LayoutParams.MATCH_PARENT .

Это сработало для меня

Создайте свой собственный стиль:

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

Используйте этот стиль в своем диалоговом окне

 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" /> 1  <!-- 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" /> 

В верхней части моего диалогового макета сделал трюк.

Для меня это сработало, когда я заменил родителя LinearLayout макета, завышенного в onCreateView, RelativeLayout. Никаких других изменений кода не требуется.

В моем случае я также использовал следующий подход:

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

Но между левым и правым краями диалога и краями экрана на некоторых устройствах Lollipop + (например, Nexus 9) были небольшие промежутки .

Это было не очевидно, но, наконец, я понял, что для того, чтобы сделать его полной шириной на всех устройствах и платформах, фон окна должен быть указан внутри styles.xml следующим образом:

 <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> 

И, конечно же, этот стиль нужно использовать, когда мы создаем диалоговое окно следующим образом:

  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); } 

}

И если вы хотите гораздо большую гибкость, можете расширить AppCompat_Dialog_Alert и настраиваемые атрибуты

Используйте это в методе onCreateView для 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 – высота фрагмента диалогового окна, измените его так, как хотите

Пользователь AlertDialog.Builder внутри вашего диалогового окна. Добавьте его в метод onCreateDialog следующим образом. И в onCreateView ничего не делать.

 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; } 

Создайте собственный стиль в файле style.xml. Просто скопируйте этот код в свой файл style.xml.

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

Затем в методе createDialog вашего DialogFragment создайте объект диалога по коду

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

Это работает для меня и надеюсь, что это тоже поможет вам