Android - 对话框 fragment 宽度保持与父级匹配

标签 android android-dialogfragment dialogfragment

美好的一天,如果这似乎与之前提出的问题重复,我们深表歉意。

我有一个 Android 应用程序,并且正在显示一个对话框 fragment 。我遇到的问题是,当基本 Activity 显示对话框 fragment 时,它的宽度被忽略。这是我的 onCreateDialog 函数中的代码:

@Override  
public Dialog onCreateDialog(Bundle savedInstanceState) {  

    final Dialog dialog = new Dialog(getActivity());  
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
            WindowManager.LayoutParams.FLAG_FULLSCREEN);  

    LayoutInflater layoutInflater = (LayoutInflater) getActivity()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View layout2 = layoutInflater.inflate(R.layout.fragment_item_dialog, null);

    dialog.setContentView(layout2);  
    setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog);

    Window window = dialog.getWindow();
    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

    window.setGravity(Gravity.TOP|Gravity.LEFT);

    WindowManager.LayoutParams params = window.getAttributes();
    params.x = 20;
    params.y = 470;
    params.width = WindowManager.LayoutParams.WRAP_CONTENT;
    params.height = WindowManager.LayoutParams.WRAP_CONTENT;

    params.copyFrom(window.getAttributes());

    window.setAttributes(params);
    // -- more code here
}

这是我的 xml 文件 fragment_item_dialog

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="400dp"
    android:layout_height="wrap_content" >  

    <!--- code here ---!>

</RelativeLayout>

高度遵循正确,但 Android 继续设置宽度以匹配父级,即使我告诉它换行内容。我的对话框 fragment 内的组件不超过 400dp,我不知道为什么 Android 强制我的布局与父级匹配。

有人知道如何解决这个问题吗?很感谢任何形式的帮助。谢谢。

最佳答案

使其工作,在 onStart() 上使用相同的代码

@Override
public void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    if (getDialog() == null)
        return;

    int width = 1100;
    int height = getResources().getDisplayMetrics().heightPixels;       
    getDialog().getWindow().setLayout(width, 
            WindowManager.LayoutParams.WRAP_CONTENT);

}

关于Android - 对话框 fragment 宽度保持与父级匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27202382/

相关文章:

android - 查看无法在android Lollipop 中刷新

java - 当显示的列表需要滚动时,按钮从 DialogFragment 中消失

android - 将 Touch 事件从 DialogFragment View 分派(dispatch)到父 Activity View

android - 带有 edittext 的 DialogFragment 在解雇后不会丢失键盘

java - 为什么我不能按照我需要的方式使用 TypeToken?

java - 解析西类牙语日期错误

java - Cardview 圆角没有显示在屏幕截图中?

android - 如何在 setCanceledOnTouchOutside 事件取消 DialogFragment 时隐藏屏幕键盘

android - DialogFragment : How to limit to single line and show "Search" icon at the keyboard? 中的 EditText

java - 使用 FQL android 获取所有 Facebook 相册 ID