实现复杂偏好屏幕的最佳方式?

时间:2011-02-03 20:07:06

标签: java android user-interface mobile

对于我的应用程序,我有一组相当复杂的配置选项供用户选择。我目前正在使用PreferenceActivity作为这些选项的用户界面,并使用共享首选项存储选项。作为我必须适应的一些设置的示例:

  • 对的列表:要选择背景图案,用户可以选择使用1到5种不同的形状(每个形状都是.png文件)并为每个形状指定一种int颜色。例如,用户可以选择橙色方块,绿色三角形和红色矩形。

  • 分层数据:我的应用程序的一部分可以配置为使用五种模式之一。每种模式都有一些相关的唯一设置,例如一种模式需要选择两个整数,另一种模式可能需要选择一个布尔值。

但是,我觉得PreferenceActivity对上述设置效果不佳,因为:

  • 共享偏好设置无法存储列表。
  • 共享偏好设置无法存储分层数据。
  • 将我的偏好界面简化为例如个人偏好按钮用于配置每种颜色,并使用从属首选项来禁用不适用于当前模式的首选项,这将使得界面变得混乱且难以使用。

我可以编写自己的Preference类来配置列表,但是我发现与实现典型的View相比,实现它们非常费力,我仍然需要处理存储问题。

我的计划是:

  • 只需使用自定义GUI实现自定义活动即可。这使我可以更自由地为配置列表做一个漂亮的界面,我可以智能隐藏不适用于当前模式的选项。
  • 将我的所有设置存储在XML文件中或通过序列化Java对象。这意味着我可以轻松支持分层数据和可变长度列表,这为进一步扩展提供了空间。

这个计划看起来是否合理?我担心我不是以Android的方式做事,但在我看来,共享偏好和PreferenceActivity不适合我的需求。 / p>

1 个答案:

答案 0 :(得分:1)

自从我开始使用Android以来,我一直在创建自己的偏好活动。这看起来真的很难,因为互联网上没有太多关于如何做的文档,但实际上它实际上非常简单。正如您所说,它可以让您更自由地决定UI的外观和行为。如果你想知道如何自己做偏好,这里有一个简单的小片段:

public class myprefs extends Activity{
private static final String PREFS_XML = "prefs_xml";
private static final String PREF_1 = "pref_1";

String preference;

private SharedPreferences preferences = null;
public void loadPrefs(){
    preferences = this.getSharedPreferences(PREFS_XML, Activity.MODE_PRIVATE);
    preference = preferences.getString(PREF_1, "default value");
}
}

获得自己的偏好几乎是多么简单。要设置它们,请使用

preferences.edit().putString(PREF_1, "hello!").commit();

可以将其放入onClick,onItemSelected或任何其他要放入的“事件”中。我将'preferences'设置为类范围的实例,以便我可以在类中的任何位置访问它而无需重新实例化它。我希望这能帮到你一点点。作为您具体问题的具体答案,我认为您的计划非常合理。