如何使DialogFragment占据整个屏幕宽度

时间:2015-03-16 00:10:07

标签: android android-dialogfragment

我尝试创建一个对话框,占用从旧的AlertDialog构建器到onCreateView()和onViewCreated()中新的DialogFragment方法的全屏宽度,以使显示的对话框占据屏幕的整个宽度。我当然可以获得屏幕的宽度和高度值,但无论我如何强制对话框使用这些值,它们都会被忽略。无论方向如何,显示的对话框始终都是相同的宽度。

在我最近的尝试中,我有一个我膨胀的xml布局。我需要使用自定义视图,因此我无法在xml中定义该视图。所以我添加它。

这是我在DialogFragment代码中最新的尝试。当然,这只是我尝试按照帖子和Slidenerd视频提示的许多尝试之一。

public class PopupDialog extends DialogFragment implements View.OnClickListener
{
private static final String TAG = PopupDialog.class.getName();
Button cancel = null;
Button focus = null;
View viewInput = null;
int width;
int height;
int id;

public PopupDialog()
{
}

public PopupDialog(View v, int id, int width, int height)
{
    viewInput = v;
    this.id = id;
    this.width = width;
    this.height = height;
}

@Override
public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstance)
{
    Log.d(TAG, "onCreateView of DialogFragment called.");
    View viewDialog = inflator.inflate(R.layout.popup_dialog, null);
//        RelativeLayout relativeLayout = (RelativeLayout)viewDialog;
//        LayoutParams params = new LayoutParams(width, height);
//        relativeLayout.setLayoutParams(params);
//        Point point = new Point();

    // Activity activity = getActivity();
    // activity.getWindowManager().getDefaultDisplay().getSize(point);

    // if(point.x > point.y)
    if(width > height)
    {
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    else
    {
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    ViewParent parent = viewInput.getParent();
    if(parent != null)
    {
        Log.d(TAG, "View already present. Removing.");
        ((ViewGroup)parent).removeView(viewInput);
    }
    LayoutParams params = new LayoutParams(width, height);
    viewInput.setLayoutParams(params);
    ((ViewGroup)viewDialog).addView(viewInput, 0);

    cancel = (Button)viewDialog.findViewById(R.id.btn_cancel);
    focus = (Button)viewDialog.findViewById(R.id.btn_focus);
    cancel.setOnClickListener(this);
    focus.setOnClickListener(this);
    setCancelable(false);
    return viewDialog;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
    super.onViewCreated(view, savedInstanceState);
    Log.d(TAG, "onViewCreated of DialogFragment called.");
    //getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, height);
    getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes();
    wmlp.gravity = Gravity.TOP | Gravity.LEFT;
    wmlp.x = 10;   //x position
    wmlp.y = 450 * (id) + 10;
//        wmlp.width = width;
//        wmlp.height = height;
}

我正在策划一个正弦波。视图具有正确的大小,因为正弦波的范围为0到12,但在横向方向上显示的对话框只有一半以上,所以看到0到6 +,然后必须等待波形回收,因为它从6到12再次显示,然后再次变为可见时,我可以将对话框放在左上角。

有谁知道如何解决这个问题?我去了片段,因为我被引导相信固定的AlertDialog方法是宽度固定的,没有人可以做到。我在DialogFragment面临同样的限制。

2 个答案:

答案 0 :(得分:0)

尝试在setContentView

之后的create()方法中添加此代码
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

答案 1 :(得分:0)

我放弃了,并在ViewFlipper的ListView中创建了图形。不想要我想要,但是我得到了更多的图表空间。