我需要找到dialog的某些元素的坐标 但是在屏幕上显示对话框之前,所有方法都返回0 如何找出屏幕上显示对话框的时间?
我的意思是在 dialog.show()之后,dialog.isShowing()返回true,但是
int width=mDialog.getWindow().getDecorView().getWidth();
返回0
答案 0 :(得分:2)
如果您需要确定屏幕上显示对话框的时间,您是否可以尝试通过setOnShowListener监听onShow事件:
final AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
int width = alertDialog.getWindow().getDecorView().getWidth();
Toast.makeText(getApplicationContext(), String.valueOf(width) Toast.LENGTH_LONG).show();
}
});
alertDialog.show();
答案 1 :(得分:0)
我自己没有这样做,但是在Android开发站点上挖掘它看起来你可能能够扩展DialogFragment类,然后通过覆盖onCreateView方法来获得所需的计算。还有一点工作,但这应该可以让您访问对话框的整个生命周期。
见这里:http://developer.android.com/reference/android/app/DialogFragment.html
答案 2 :(得分:0)
我仍然试着通过.getWidth()
和.getHeight()
来获取对话框的大小。我认为它只适用于不支持对话框的活动。
尝试此选项:
AlertDialog.Builder a = new AlertDialog.Builder(this);
View v = a.create().getCurrentFocus();
v.measure(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
int height = v.getMeasuredHeight();
int width = v.getMeasuredWidth();
或此方法
private int getDialogWidth(Dialog dialog)
{
DisplayMetrics dm = new DisplayMetrics();
dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(dm);
String width = "" + dm.widthPixels ;
return (Integer.parseInt(width));
}