0

範囲内で利用可能なすべての Wifi ネットワークのリストを表示する AlertDialog のカスタム サブクラスがあります。

このダイアログのインスタンスを作成して 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):

Dialog クラスで使用されるダイアログ ウィンドウとアクティビティ (API レベル 10 以下) の既定のテーマ。これにより、ウィンドウがフローティング (画面全体に表示されない) に変更され、そのコンテンツの周りにフレームが配置されます。ダイアログのようなアクティビティを作成したい場合は、このテーマをアクティビティに設定できます。

お役に立てれば!

編集:

の問題を解決するには、 の代わりにsetTitle継承するのが最も簡単な方法のようです。DialogAlertDialog

また、コンストラクターでを渡す必要はありませんandroid.R.style.Theme_Dialog(明らかに、サブクラス化AlertDialogにはテーマがありません)。

于 2012-05-19T20:49:47.570 に答える