N S*_*rma 78 android fragment android-fragments android-dialogfragment
您好我正在使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)

提前致谢.
sav*_*ion 132
这是我想出来解决这个问题的解决方案:
@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));
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
onCrateView在返回膨胀视图之前,您可以在Fragment方法中使用以下代码.
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Run Code Online (Sandbox Code Playgroud)
Epi*_*rce 69
您是否尝试使用Elvis的答案如何使警报对话框填充90%的屏幕尺寸?
它是以下内容:
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
Run Code Online (Sandbox Code Playgroud)
更新:
上面的代码应该添加到内部的onStart()方法中DialogFragment.
LayoutParams.FILL_PARENT不推荐使用LayoutParams.MATCH_PARENT.
Kis*_*ela 39
这对我有用
创建自定义样式:
<style name="DialogStyle" parent="Base.Theme.AppCompat.Dialog">
<item name="android:windowMinWidthMajor">97%</item>
<item name="android:windowMinWidthMinor">97%</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在对话框中使用此样式
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
}
Run Code Online (Sandbox Code Playgroud)
AA_*_*_PV 21
对我来说,当我用RelativeLayout替换onCreateView中膨胀的布局的LinearLayout父级时,它可以工作.无需更改其他代码.
小智 18
<!-- 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" />
Run Code Online (Sandbox Code Playgroud)
在我的对话框布局的顶部做了伎俩.
Meh*_*aji 14
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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想要更多的灵活性可以扩展AppCompat_Dialog_Alert和自定义属性
小智 12
基于其他解决方案,我创建了自己的解决方案。
<style name="AppTheme.Dialog.Custom" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowNoTitle">true</item>
<item name="android:windowMinWidthMajor">100%</item>
<item name="android:windowMinWidthMinor">100%</item>
</style>
Run Code Online (Sandbox Code Playgroud)
abstract class BaseDialogFragment : DialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.AppTheme_Dialog_Custom)
}
}
Run Code Online (Sandbox Code Playgroud)
goR*_*Gon 10
就我而言,我也使用了以下方法:
@Override
public void onStart() {
super.onStart();
getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, (int) getResources().getDimension(R.dimen.dialog_height));
}
}
Run Code Online (Sandbox Code Playgroud)
但是对话框的左右边缘和一些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>
Run Code Online (Sandbox Code Playgroud)
当然,我们在创建对话框时需要使用这种样式,如下所示:
public static DialogFragment createNoTitleDlg() {
DialogFragment frag = new Some_Dialog_Frag();
frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
return frag;
}
Run Code Online (Sandbox Code Playgroud)
我想澄清一下。两种方法都是正确的,但是使用不同的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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59543 次 |
| 最近记录: |