AlertDialog
在开发中,AlertDialog是十分不错的类,它提供给我们一个通用对话框,我们只需要简单的设置一些东西就可以实现了一个具有简单功能的对话框了,包括按钮,或者是列表等等,但是我们可以注意到一个问题,那就是对话框的大小,它是自适应的,如果内容太大,我们的显示就出现了问题,比如下面的情况:
可以看到,这个内容已经占了很大的空间,看起来不是很美观,所以我们想设置它的自定义大小,比如说就是占屏幕的1/2,这样就可以看起来不错,但是该怎么做的?
自定义高度
源码:
String items[] = new String[]{"菜单1","菜单2","菜单3","菜单4"};
AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle(
"菜单").setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//自己实现的内容
dialog.dismiss();
}
});
AlertDialog ab = builder.create();
ab.show();
WindowManager manager = getWindowManager();
Display d = manager.getDefaultDisplay();
Window window = ab.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.height = (int) (d.getHeight() * 0.5);
params.gravity = Gravity.CENTER_HORIZONTAL;
ab.getWindow().setAttributes(params);
实现思路
- 我们需要生成一个AlertDialog.Builder的对象来生成AlertDialog对象,因为我们不能直接new出一个对象,我们在Builder对象设置好内容,然后调用Builder的create方法来生成一个AlertDialog对象。
- 我们需要得到一个WindowManger对象和一个Display对象,用处是得到屏幕的分辨率。
- 我们需要需要得到一个Window对象,对AlertDialog的方法来得到,此时Window对象就是AlertDialog对象的一个实体了。
- 我们需要得到LayoutParams的对象,然后我们设置高度,用params.height = (int) (d.getHeight() * 0.5)这一行代码就可以设置高度了,为屏幕高度的一半。
- 最后一步就是将LayoutParams对象设置到我们之前得到的Window对象中,这样我们就可以大功告成了^_^
注意
代码是简单的,但是开始写的时候我们还是很多的,因为总是无法应用成功,原因最后找到了,不过是很坑的原因,希望大家有所注意。
我总是想当然的以为设置好了高度之后才调用AlertDialog的show()方法,其实错误就是在这里,我们一定要先调用show()方法,再得到Window的对象,然后我们才可以设置高度。如果我们提前设置了高度,然后才调用show()方法,那么是不会有用的。因为只有先显示,我们才能得到显示的具体参数,然后Window对象才能有具体的值才可以被我们设置。
有什么不太了解的,欢迎大家和我交流。
时间: 2024-12-28 04:46:31