【问题标题】:PreferenceActivity works properly on Android 2.1, but not 4.1 (padded)PreferenceActivity 在 Android 2.1 上正常工作,但不是 4.1(填充)
【发布时间】:2023-03-04 15:09:01
【问题描述】:

我正在编写一个应用程序。它需要在旧的 android 操作系统上运行才能有用。我使用 PreferencesActivity 编写了首选项屏幕,该 PreferencesActivity 填充了包含 PreferenceScreen 的 options.xml 文件。它没有首选项子菜单(因此 PreferenceFragment 没有真正的好处)。

在 Android 2.1(2.2 和 2.3,尚未在 ICS 上测试)中,屏幕在横向模式下正常显示:

但在 Jellybean 上,它看起来像这样:

看起来很糟糕。我没有定义为布局,只是标准的 addPreferencesFromResource()。有谁知道这可能是什么原因?还是解决方案?

我的 onCreate 看起来像这样:

    protected void onCreate(Bundle savedInstanceState) { //
    super.onCreate(savedInstanceState);
    Log.i(TAG, "Options Activity Loaded.");
    setTitle(getString(R.string.optionsTitle));
    addPreferencesFromResource(R.xml.options);
    setupListeners();
}

其他所有东西都只是创建 Preference 对象并在它们被点击时分配方法来做事。我不想为 PreferenceFragment 和 PreferenceActivity 编写代码。如果最大版本的市场份额没有该 API,并且他们不会将其添加到兼容性库中,我不明白谷歌希望我们如何使用 Fragment API。

【问题讨论】:

  • 我觉得 ICS/JB 偏好屏幕有那个填充。我不确定是否有办法删除它,但我没有给出明确的答案(这就是我刚刚发表评论的原因。)
  • 我会直接抛出 addPreferencesFromResource() 已被弃用。可能在 4.0+ 上使用仍受支持的方法(在该文档页面中有详细说明)会产生正确的结果。
  • 希望避免这些...但可能不得不投降并无论如何都要这样做。我不明白他们为什么不让它完全兼容。填充没有理由。

标签: android padding preferenceactivity preference windowed


【解决方案1】:

您的应用程序可以同时支持 SharedPreferences 的旧功能和新功能。您可以为旧偏好提供一个类,为新偏好提供一个类。它没有更多的代码。您可以像这样使您的应用向后兼容:

Class spc = Build.VERSION_SDK_INT < Build.VERSION_CODES.HONEYCOMB ? 
    oldPreferenceActivity.class : newFragmentPreferenceActivity.class;

Intent i = new Intent (this, spc);
startActivityForResult (i, SHOW_PREFERENCES); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2011-06-09
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多