AlertDialog的尺寸问题

如何设置一个AlertDialog的尺寸?

很容易就可以查到,有这么一个做法:
How to control the width and height of the default Alert Dialog in Android?

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.setTitle("Title");
alertDialog = builder.create();
alertDialog.show();
alertDialog.getWindow().setLayout(600, 400); //Controlling width and height.

注意:setLayout是在show()之后执行的。

然而,事情并没有这么简单。
按照这种方法显示出来的dialog,测量一下宽高之后,发现dialog的宽高比我们设置的要小一点点,而不是精确的相等。

进行了好长时间的排查,最后确定,是alertDialog本身最大的View里面带上了padding,这个是由默认的style带过来的。
当时没有找到在哪里设置这个padding,于是使用了一种折衷的方式来使得dialog和我们要求的size相等。

final AlertDialog alertDialog = builder.setView(R.layout.dialog).create();
alertDialog.show();

View decorView = alertDialog.getWindow().getDecorView();
int paddingTop = decorView.getPaddingTop();
int paddingBottom = decorView.getPaddingBottom();
int paddingLeft = decorView.getPaddingLeft();
int paddingRight = decorView.getPaddingRight();

int width = 600 + paddingLeft + paddingRight;
int height = 400 + paddingTop + paddingBottom;
alertDialog.getWindow().setLayout(width, height);

以上。

你可能感兴趣的:(AlertDialog的尺寸问题)