我有一个AlertDialog的自定义子类,它应该显示范围内所有可用Wifi网络的列表。
我通过创建它的实例,并调用show()和我没有使用AlertDialog.Builder 来显示此对话框(因为我希望使用我的自定义类)。
我有自己的布局作为内容视图显示,但我想要常规的AlertDialog外观,标题标题和框架。
我的自定义布局非常简单:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView>
我将它添加到onCreate()的对话框中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.pick_wifi_network);
setContentView(R.layout.pick_wifi_dialog);
// Rest of implementation
}
但结果看起来与AlertDialog完全不同。没有标题,ListView占据整个屏幕:
那么我做错了什么,我该怎么做呢?
谢谢!
修改 为什么我不使用AlertDialog.Builder:我的自定义Dialog类负责监听WifiManager的SCAN_RESULTS_AVALIABLE_ACTION,并在结果刷新时更新ListView。出于这个原因,我无法使用AlertDialog.Builder。 结束编辑
答案 0 :(得分:1)
我认为您的问题出现在对话框的主题中(您不会应用)。
我还没有尝试过这个,但如果我理解正确的话,它应该有效:
在对话框的构造函数中,调用接收主题的超级构造函数,传递标准对话框主题。
public CustomDialog(Context context) {
super(context, android.R.style.Theme_Dialog);
}
在Android中创建的对话框具有此默认主题。
Theme_Dialog的文档说明(v2.2):
对话框窗口和活动的默认主题(在API级别10和 lower),由Dialog类使用。这会将窗口更改为 浮动(不填满整个屏幕),并在其周围放置一个框架 内容。如果您愿意,可以在活动上设置此主题 制作一个看起来像对话框的活动。
希望这有帮助!
修改强>
要解决setTitle
的问题,最简单的方法似乎是继承Dialog
而不是AlertDialog
。
同样这样做,没有必要在构造函数中传递android.R.style.Theme_Dialog
(显然子类AlertDialog
没有主题)。