具有自定义内容视图的AlertDialog看起来与AlertDialog不同

时间:2012-05-19 19:33:47

标签: java android alertdialog android-alertdialog android-dialog

我有一个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占据整个屏幕:

enter image description here

那么我做错了什么,我该怎么做呢?

谢谢!

修改 为什么我不使用AlertDialog.Builder:我的自定义Dialog类负责监听WifiManager的SCAN_RESULTS_AVALIABLE_ACTION,并在结果刷新时更新ListView。出于这个原因,我无法使用AlertDialog.Builder。 结束编辑

1 个答案:

答案 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没有主题)。