【问题标题】:Android - Dialog Fragment width keeps on matching parentAndroid - 对话框片段宽度保持匹配父级
【发布时间】:2014-11-29 12:44:01
【问题描述】:

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

我有 Android 应用程序,我正在显示一个对话框片段。我遇到的问题是,当基本活动显示对话框片段时,它的宽度被忽略了。这是我的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 仍会继续设置宽度以匹配父级。我的对话框片段中的组件不超过 400dp,我不知道为什么 Android 会强制我的布局与父级匹配。

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

【问题讨论】:

  • 顺便说一句:如果屏幕小于 400dp,您认为会发生什么?最好只使用带有填充或边距的match_parent。这样一来,它始终可以在任何屏幕上正常显示。
  • 这是一个有效的观点,但是我只在单个设备上进行开发。实际上,让我尝试在右侧放置一个填充,看看会发生什么。
  • 片段的基本相对视图上的边距被忽略。填充从对话框边框内到内容创建空间。我需要固定宽度以显示基本布局中的内容。
  • 如果你打算用于单个设备,那么为什么不为 params.width = 470 和 params.height = 50 设置固定整数像素值呢?

标签: android android-dialogfragment dialogfragment


【解决方案1】:

让它工作,在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);

}

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多