0

在我的 Android 项目中,我已经创建了一个自定义对话框:一个名为SelectColorDialogextends的类Dialog,它允许用户查看一个大的颜色单元矩阵,以便选择一种特定的颜色。对话框通过回调函数将选定的颜色值(as Integer)返回给对话框发起者——通常是一个活动。

我有一个类似的自定义对话框,SelectTypefaceDialog可以轻松选择字体。可用字体列表以ListView行的形式显示,每个都由名称标识,并带有以该字体呈现的相关简短示例文本。可用的字体包括常用的 droid 字体,例如 NORMAL、MONOSPACE 等,以及用户希望加载到 SDCard 上特定子目录中的任何外部来源的 TTF 字体文件。

这些自定义对话框最初并未设计为直接与 SharedPreferences、首选项定义 XML 文件或任何 PreferenceActivity 一起使用。取而代之的是,每个对话框都可以通过用户按下按钮或菜单项从任何活动中弹出。创建这些对话框的活动类也有内部回调类,选择事件侦听器,以检测用户何时选择颜色或字体。

这两个对话框没有确定和取消按钮。相反,用户只需单击对话框中的某个项目 - 某种视图 - 以选择相应的颜色或字体值(隐式确定),或者按下设备的后退按钮以关闭对话框而不采取任何操作(隐式取消) .

我现在想更进一步,通过 apreferences.XML和关联的PreferenceActivity.

如果可能的话,我宁愿DialogPreference直接在这些现有对话框上建立两个子类,但我不知道该怎么做。我怀疑我做不到,我需要重新开始,并将当前在自定义对话框类中的所有 java 代码(用于颜色或字体显示和选择)直接复制或改编到自定义DialogPreference类中,也许通过覆盖onCreateDialogView()和/或其他方法?

4

1 回答 1

1

这个问题可能有点老了,但我希望对那些将来会遇到同样问题的人有所帮助:只需扩展 Preference 而不是 DialogPreference。DialogPreference 的设计很糟糕,并且预期使用自定义 Dialog 的“官方”方式 - 覆盖受保护的 showDialog 方法不起作用,因为这个单一方法包含一半的类逻辑。

于 2012-12-20T04:16:05.220 回答