Dialog.setContentView(View)和AlertDialog.setView(View)之间的区别是什么?

14
我正在创建一个自定义对话框以从用户那里获取输入。我注意到当我使用 AlertDialog 时,可以使用 setView() 方法将诸如 EditText 等小部件添加到 AlertDialog 中。我正在研究自定义 AlertDialog 并注意到 Dialog 有一个方法叫做 setContentView()。在 AlertDialog 的子类中,我可以使用 setContentView()setView()

我注意到的一个区别是,在 AlertDialog 上使用 setView() 时,我可以看到积极和消极按钮。 在我的 AlertDialog 子类中,使用 setContentView(),我不会得到积极和消极按钮。

有人能解释其他区别吗?

谢谢。


你不能在AlertDialog中使用"setContentView()"。 - Jaydeep Khamar
实际上你可以这么做。由于AlertDialog是Dialog的子类,因此AlertDialog继承了Dialog的所有方法,包括Dialog.setContentView()。 - kralvarado
我已经尝试过了,你会得到这个错误: 方法setContentView(int)在类型AlertDialog.Builder中未定义 :) - Jaydeep Khamar
你可以在 AlertDialog 中使用它,但不能在 AlertDialog.Builder 中使用。 - Czechnology
3个回答

31
如果我理解正确的话,setContentView 会用你自定义的布局来填充整个对话框窗口,标题、图标、按钮等全部被替换。而setView则是在标题和按钮之间设置视图的布局。

查看图片


3
我理解您的意思是指“setContentView”吗? - Mugen

2

setContentView是AlertDialog的父类方法,这意味着所有对话框窗口都可以使用此方法。而setView是AlertController的方法,在AlertDialog窗口中,有顶部面板(topPanel)、内容面板(contentPanel)和按钮面板(buttonPanel),setView只会将自定义视图设置到内容面板。


0

顺便提一下,您还可以调用AlertDialog的setView方法,这似乎也可以去除视图周围的额外“间距”。

像这样:

void setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom)

alertDialog.setView(myView,0,0,0,0);


我已经在Android参考文档中读到了同样的内容,但是它对我似乎不起作用;它只会识别setView(myview); 你知道如何使用setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom)吗? - iversoncru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接