我尝试创建一个对话框,占用从旧的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面临同样的限制。
答案 0 :(得分:0)
尝试在setContentView
之后的create()方法中添加此代码getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
答案 1 :(得分:0)
我放弃了,并在ViewFlipper的ListView中创建了图形。不想要我想要,但是我得到了更多的图表空间。