在我的Android项目中,我已经创建了一个自定义对话框:一个名为SelectColorDialog
的类,扩展Dialog
,允许用户查看大的颜色单元矩阵以选择特定的颜色。该对话框通过回调函数将所选颜色值(如Integer
)返回给对话框启动器 - 通常是一个活动。
我有一个类似的自定义对话框SelectTypefaceDialog
,可以轻松选择字体。显示可用字体列表,作为ListView
行,每个行按名称标识,并在该字体中呈现相关的短样本文本。可用的字体包括常用的droid字体,如NORMAL,MONOSPACE等,以及用户关心加载到SD卡上特定子目录的任何外部源TTF字体文件。
这些自定义对话框最初并未设计为与SharedPreferences,首选项定义XML文件或任何PreferenceActivity一起使用。而不是通过用户按下按钮或通过菜单项,可以从任何活动弹出每个对话框。创建这些对话框的活动类还具有内部回调类,选择事件侦听器,用于检测用户何时选择颜色或字体。
这两个对话框没有“确定”和“取消”按钮。相反,用户只需在对话框中单击某个项目 - 某种类型的视图 - 以选择相应的颜色或字体值(隐式确定),或者按下设备的后退按钮以关闭不执行任何操作的对话框(隐式取消)
我现在想更进一步,通过preferences.XML
和关联的PreferenceActivity
将这两个自定义对话框合并到共享首选项框架中。
如果可能的话,我宁愿直接在这些现有的对话框上建立两个DialogPreference
子类,但我看不出怎么做。我怀疑我不能,并且我需要重新开始,并复制或调整当前在自定义对话框类中的所有Java代码 - 用于颜色或字体显示和选择 - 直接进入自定义{{1相反,可能通过覆盖DialogPreference
和/或其他方法?
答案 0 :(得分:1)
这个问题可能有点旧,但我希望能帮助那些人,将来看同样的问题:只需扩展Preference而不是DialogPreference。 DialogPreference的设计很糟糕,并且期望使用自定义Dialog的“官方”方式 - 覆盖受保护的showDialog方法不起作用,因为这个单一方法包含一半的类逻辑。