0

私の Android プロジェクトでは、既にカスタム ダイアログを作成しました。これは、ユーザーが特定の色を選択するためにカラー セルの大きなマトリックスを表示できるようにする、SelectColorDialogextendsという名前のクラスです。Dialogダイアログは、コールバック関数を介して、選択された色の値 (としてInteger) をダイアログの開始者 (通常はアクティビティ) に返します。

SelectTypefaceDialog簡単にフォントを選択できるように、同様のカスタム ダイアログ があります。使用可能な書体のリストがListView行として表示され、それぞれが名前で識別され、関連する短いサンプル テキストがその書体でレンダリングされます。利用可能な書体には、NORMAL、MONOSPACE などの通常のドロイド フォントと、ユーザーが SD カードの特定のサブディレクトリにロードする外部ソースの TTF フォント ファイルが含まれます。

これらのカスタム ダイアログは、最初は、SharedPreferences、設定定義 XML ファイル、または任意の PreferenceActivity と組み合わせて直接使用するようには設計されていませんでした。代わりに、各ダイアログは、ユーザーがボタンを押すか、メニュー項目を介して、任意のアクティビティからポップアップできます。これらのダイアログを作成するアクティビティ クラスには、ユーザーがいつ色やフォントを選択したかを検出するための内部コールバック クラス (選択イベント リスナー) もあります。

これら 2 つのダイアログには、[OK] ボタンと [キャンセル] ボタンがありません。代わりに、ユーザーはダイアログ内のアイテム (ある種のビュー) をクリックして、対応する色または書体の値を選択するか (暗黙の OK)、デバイスの戻るボタンを押して何もアクションを実行せずにダイアログを閉じます (暗黙のキャンセル)。 .

preferences.XMLさらに進んで、これら 2 つのカスタム ダイアログを、および関連するを介して共有設定フレームワークに組み込みたいと思いますPreferenceActivity

可能であれば、これらの既存のダイアログに直接基づいて2 つのサブクラスを作成したいと考えDialogPreferenceていますが、その方法がわかりません。私はできないのではないかと思います。最初からやり直して、現在カスタム ダイアログ クラスにあるすべての Java コード (色またはフォントの表示と選択用) を直接カスタムDialogPreferenceクラスにコピーまたは適合させる必要があると思います。おそらくオーバーライドonCreateDialogView()および/または他の方法で?

4

1 に答える 1

1

この質問は少し古いかもしれませんが、将来同じ問題を検討している人たちを助けたいと思っています。DialogPreferenceの代わりにPreferenceを拡張するだけです。DialogPreferenceは不適切に設計されており、カスタムDialogを使用する「公式」な方法が期待されます。この単一のメソッドにはクラスロジックの半分が含まれているため、保護されたshowDialogメソッドのオーバーライドは機能しません。

于 2012-12-20T04:16:05.220 に答える