我可以基于预先存在的自定义对话框创建自定义DialogPreference吗?

时间:2012-10-07 06:15:45

标签: android android-layout sharedpreferences android-ui android-dialog

在我的Android项目中,我已经创建了一个自定义对话框:一个名为SelectColorDialog的类,扩展Dialog,允许用户查看大的颜色单元矩阵以选择特定的颜色。该对话框通过回调函数将所选颜色值(如Integer)返回给对话框启动器 - 通常是一个活动。

我有一个类似的自定义对话框SelectTypefaceDialog,可以轻松选择字体。显示可用字体列表,作为ListView行,每个行按名称标识,并在该字体中呈现相关的短样本文本。可用的字体包括常用的droid字体,如NORMAL,MONOSPACE等,以及用户关心加载到SD卡上特定子目录的任何外部源TTF字体文件。

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

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

我现在想更进一步,通过preferences.XML和关联的PreferenceActivity将这两个自定义对话框合并到共享首选项框架中。

如果可能的话,我宁愿直接在这些现有的对话框上建立两个DialogPreference子类,但我看不出怎么做。我怀疑我不能,并且我需要重新开始,并复制或调整当前在自定义对话框类中的所有Java代码 - 用于颜色或字体显示和选择 - 直接进入自定义{{1相反,可能通过覆盖DialogPreference和/或其他方法?

1 个答案:

答案 0 :(得分:1)

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