0

我有一个 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。 结束编辑

4

1 回答 1

1

我认为您的问题出在对话框的主题中(您没有应用该主题)。

我没有尝试过,但如果我理解正确,它应该可以工作:

在对话框的构造函数中,调用接收主题的超级构造函数,传递标准对话框主题。

public CustomDialog(Context context) {
    super(context, android.R.style.Theme_Dialog);
}

在 Android 中创建的对话框具有此默认主题。

Theme_Dialog 的文档状态(v2.2):

对话框窗口和活动的默认主题(在 API 级别 10 和更低级别),由 Dialog 类使用。这会将窗口更改为浮动(而不是填满整个屏幕),并在其内容周围放置一个框架。如果您想制作一个看起来像对话框的活动,您可以在活动上设置此主题。

希望这可以帮助!

编辑:

要解决问题setTitle,最简单的方法似乎是继承Dialog而不是AlertDialog.

同样这样做,不需要android.R.style.Theme_Dialog在构造函数中传递(显然子类化AlertDialog没有主题)。

于 2012-05-19T20:49:47.570 回答