4

我有一个库项目,我用它来构建两个应用程序,一个是公共的,一个是私人的,供个人使用,而更多的设置对大多数人来说无用。在这个库项目中,我定义了一个 PreferenceActivity(对于 API < Honeycomb)和一些 PreferenceFragments(对于 API >= Honeycomb),带有使用本指南的首选项标头:http: //developer.android.com/guide/topics/ui/settings。 html#BackCompatHeaders

为了支持旧设备,我定义了这个 XML 文件,如指南中所示:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <Preference 
        android:title="@string/base_de_donnees"
        android:summary="@string/summary_pref_restaurer_bdd_sd">
        <intent
            android:targetPackage="com.me.app_lib"
            android:targetClass="com.me.app_lib.activities.preferences.SettingsActivity"
            android:action="com.me.app_lib.activities.preferences.SettingsActivity.ACTION_PREF_BDD" />
    </Preference>

   <Preference 
       android:title="@string/saisie"
       android:summary="@string/summary_pref_saisie">
       <intent
           android:targetPackage="com.me.app_lib"
           android:targetClass="com.me.app_lib.activities.preferences.SettingsActivity"
           android:action="com.me.app_lib.activities.preferences.SettingsActivity.ACTION_PREF_SASISIE" />

   </Preference>
</PreferenceScreen>

其中 com.me.app_lib 是库项目的包,其中定义了 SettingsActivity。但是,当从其中一个子项目调用意图时,我会崩溃,因为 targetPackage 与子项目的不匹配。如果我将 com.me.app_lib 更改为 com.me.app_public (其中一个子项目的包)它可以工作,但由于我有两个子项目,这不是一个选项。

我是否必须将此文件复制到每个子项目并仅更改 targetPackage 行,还是有更好的选择?

4

1 回答 1

4

我最终所做的是将 com.me.app_lib 定义为资源字符串。android:targetPackage 属性变为:

android:targetPackage="@string/package_activity_preferences"

然后我可以在两个子项目中为这个字符串定义一个不同的值。这不像我希望的那样干净,但至少我不需要在两个子项目中复制粘贴相同的文件。targetClass 是我的库项目的一部分,所以我不需要对其进行任何更改;只有 targetPackage 属性有问题。

于 2014-09-05T03:53:53.787 回答