在Android上创建多个preferences.xml文件时,如何重用代码?

Ben

我想根据设备SDK和屏幕尺寸在我的应用程序中显示不同的首选项,但是某些首选项将显示在所有设备上。我可以通过为每个可能的设备创建完整的preferences.xml文件来完成此操作,如下所示:

xml/preferences.xml

<PreferenceScreen>
    <!-- Preference 1 (all devices) -->
    <!-- Preference 2 (all devices) -->
</PreferenceScreen>

xml-v21/preferences.xml

<PreferenceScreen>
    <!-- Preference 1 (all devices) -->
    <!-- Preference 2 (all devices) -->
    <!-- Preference 3 (SDK 21 only) -->
</PreferenceScreen>

但是鉴于屏幕尺寸和SDK的可能组合数量,这将很快变得难以处理。我真正想做的是在所有设备上使用相同的基本首选项列表,并动态混合特定于某些屏幕尺寸和SDK的其他首选项。我已经阅读了《 Android提供的资源》指南,但似乎仍然需要按照上述方式使用替代资源,才能为每种屏幕尺寸和SDK组合创建一个单独的资源目录,并且需要大量代码复制。是否有一个不错的,优雅的解决方案来解决我所缺少的这个问题?

布鲁斯

您阅读设置指南了吗?我的应用程序还动态地进行了很多更改,包括1)显示哪些标题/片段,以及2)包含每个片段所包含的内容。对于这两个问题,您都可以使用所描述的不同资源版本,也可以实现代码上的差异。

对于问题1,您可以直接调用loadHeadersFromResource并具有不同的标头资源文件,也可以具有执行类似操作的代码。例如,我的PreferencesActivity为每个prefs部分使用一个单独的PreferenceFragment子类,并在运行时决定要显示哪些片段(标题):

@Override
public void onBuildHeaders(List<Header> targets) {
    // Build a list of PreferenceFragment class objects to show now
    List<Class<? extends PreferenceFragment>> fragmentClasses = ...;

    // Create a Header for each fragment to return to Android
    for (Class<? extends PreferenceFragment> fragmentClass: fragmentClasses) {
        try {
            PreferenceFragment fragment = fragmentClass.newInstance();
            Header header = new Header();
            header.fragment = fragmentClass.getName();
            header.titleRes = fragment.getTitleId();
            targets.add(header);
            this.headers = targets;
        } catch (Exception e) {
        }
    }
}

对于问题2,您可以从公共资源文件中的首选项开始,然后在代码中添加有条件的首选项:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load common prefs from an XML resource
    addPreferencesFromResource(R.xml.preferences);

    // Add conditional prefs in code
    PreferenceScreen prefScreen = getPreferenceScreen();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Preference pref = ...; // create condition pref
        prefScreen.addPreference(pref);
    }
}

我实际上在通用和条件代码中添加了所有首选项。但是,我没有找到一种从头开始创建PreferenceScreen的方法,因此实际上我有一个从资源加载的空XML文件,然后在代码中添加所有首选项。它真的很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android上创建多个preferences.xml文件时,如何重用代码?

来自分类Dev

多个创建条件重用代码

来自分类Dev

重用代码Android时出现动画问题

来自分类Dev

Marklogic:导入csv时在文档上创建了多个XML文件。如何获取根文档URI路径?

来自分类Dev

如何在 Android 中重用 Retrofit 代码

来自分类Dev

Ubuntu 18.04 上的 Android Studio:未找到片段...如何“在代码中创建一个或多个片段”?

来自分类Dev

如何使动画代码可用于多个类-可重用性

来自分类Dev

如何在多个枚举名称中重用代码?

来自分类Dev

如何在iOS中创建可重用代码?

来自分类Dev

使用Go生成XML文件时,如何创建doctype声明?

来自分类Dev

通过DocumentBuidlerFactory创建新的xml文件时如何生成ParserConfigurationException

来自分类Dev

如何在Android下重用现有的Qt代码?

来自分类Dev

如何在XML中创建可重用的视图组?

来自分类Dev

UiBinder如何:在ui.xml中创建可重用组件

来自分类Dev

版本2.2(级别8)上的Android支持库ActionBar NullPointerException-与preferences.xml冲突

来自分类Dev

版本2.2(级别8)上的Android支持库ActionBar NullPointerException-与preferences.xml冲突

来自分类Dev

ES6:如何在不将B暴露给客户端代码的情况下在库的多个文件中重用const变量?

来自分类Dev

如何在Android中创建不带XML的多个标签

来自分类Dev

Android:如何为多个布局屏幕创建可重用的类以以编程方式启用/禁用Wifi

来自分类Dev

如何在.aspx页的文件后面创建多个代码

来自分类Dev

我如何使用Java代码在Android上创建设计

来自分类Dev

如何重用休眠中文件系统上已经存在的索引

来自分类Dev

在多个设置中重用代码

来自分类Dev

在多个不同站点上重用Python Flask代码

来自分类Dev

使用KSoap2时如何在代码中创建适当的肥皂信封(请求xml)?

来自分类Dev

重用多个值构造函数模式匹配时,避免重复代码

来自分类Dev

格式化xml文件时,如何设置IntelliJ在单独的行上放置xml标签?

来自分类Dev

格式化xml文件时,如何设置IntelliJ在单独的行上放置xml标签?

来自分类Dev

在eclipse上创建android项目时出错

Related 相关文章

  1. 1

    在Android上创建多个preferences.xml文件时,如何重用代码?

  2. 2

    多个创建条件重用代码

  3. 3

    重用代码Android时出现动画问题

  4. 4

    Marklogic:导入csv时在文档上创建了多个XML文件。如何获取根文档URI路径?

  5. 5

    如何在 Android 中重用 Retrofit 代码

  6. 6

    Ubuntu 18.04 上的 Android Studio:未找到片段...如何“在代码中创建一个或多个片段”?

  7. 7

    如何使动画代码可用于多个类-可重用性

  8. 8

    如何在多个枚举名称中重用代码?

  9. 9

    如何在iOS中创建可重用代码?

  10. 10

    使用Go生成XML文件时,如何创建doctype声明?

  11. 11

    通过DocumentBuidlerFactory创建新的xml文件时如何生成ParserConfigurationException

  12. 12

    如何在Android下重用现有的Qt代码?

  13. 13

    如何在XML中创建可重用的视图组?

  14. 14

    UiBinder如何:在ui.xml中创建可重用组件

  15. 15

    版本2.2(级别8)上的Android支持库ActionBar NullPointerException-与preferences.xml冲突

  16. 16

    版本2.2(级别8)上的Android支持库ActionBar NullPointerException-与preferences.xml冲突

  17. 17

    ES6:如何在不将B暴露给客户端代码的情况下在库的多个文件中重用const变量?

  18. 18

    如何在Android中创建不带XML的多个标签

  19. 19

    Android:如何为多个布局屏幕创建可重用的类以以编程方式启用/禁用Wifi

  20. 20

    如何在.aspx页的文件后面创建多个代码

  21. 21

    我如何使用Java代码在Android上创建设计

  22. 22

    如何重用休眠中文件系统上已经存在的索引

  23. 23

    在多个设置中重用代码

  24. 24

    在多个不同站点上重用Python Flask代码

  25. 25

    使用KSoap2时如何在代码中创建适当的肥皂信封(请求xml)?

  26. 26

    重用多个值构造函数模式匹配时,避免重复代码

  27. 27

    格式化xml文件时,如何设置IntelliJ在单独的行上放置xml标签?

  28. 28

    格式化xml文件时,如何设置IntelliJ在单独的行上放置xml标签?

  29. 29

    在eclipse上创建android项目时出错

热门标签

归档