您好我正在使用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
提前致谢.
对我来说,当我用RelativeLayout替换onCreateView中膨胀的布局的LinearLayout父级时,它可以工作.无需更改其他代码.
这是我想出来解决这个问题的解决方案:
@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
在返回膨胀视图之前,您可以在Fragment方法中使用以下代码.
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
<!-- A blank view to force the layout to be full-width --> <View android:layout_ android:layout_ android:layout_gravity="fill_horizontal" />
在我的对话框布局的顶部做了伎俩.
我想澄清一下。两种方法都是正确的,但是使用不同的DialogFragment。
android.app.DialogFragment
@Override public void onStart() { super.onStart(); Dialog dialog = getDialog(); if (dialog != null) { int width = ViewGroup.LayoutParams.MATCH_PARENT; int height = ViewGroup.LayoutParams.MATCH_PARENT; dialog.getWindow().setLayout(width, height); } }
android.support.v4.app.DialogFragment
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen); }
这对我有用
创建自定义样式:
<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 }
您是否尝试使用Elvis的答案如何使警报对话框填充90%的屏幕尺寸?
它是以下内容:
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
更新:
上面的代码应该添加到内部的onStart()
方法中DialogFragment
.
LayoutParams.FILL_PARENT
不推荐使用LayoutParams.MATCH_PARENT
.
就我而言,我也使用了以下方法:
@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和自定义属性