我最近拆分了我的项目并创建了一个库项目和一个主项目。有一个具有自定义属性的首选项屏幕,我从我的preferences.xml 中删除了带有自定义属性的首选项,将它们放入自己的xml 文件中,将它们重新包含到preferences.xml 文件中并重新定义主项目中的各个文件(过程在此处对另一个问题的回答中进行了详细说明。
该项目构建并正常运行。但是,每当我尝试打开首选项屏幕时,我都会收到 RuntimeException。使用自定义属性删除首选项可以解决问题,因此我将其追溯到那里。不幸的是,异常中没有有用的信息。
attrs.xml(存在于 lib 项目中)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="numberpickerPref">
<attr name="maxValue" format="integer" />
<attr name="minValue" format="integer" />
</declare-styleable>
</resources>
preferences.xml(也在 lib 项目中)
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/pref_VibrationSettingsTitle">
<CheckBoxPreference android:key="@string/pref_vibrateFlagKey"
android:title="@string/pref_VibrateTitle"
android:summary="@string/pref_VibrateSummary"
android:defaultValue="false" />
<include layout="@layout/pref_vibrate_on" />
<include layout="@layout/pref_vibrate_off" />
</PreferenceCategory>
</PreferenceScreen>
pref_vibrate_off.xml(在 lib 和 main 项目中定义)(只有 diff 是 my 命名空间,一个指向 lib,另一个指向 main 项目)
<?xml version="1.0" encoding="utf-8"?>
<!-- Stupid workaround because Android still has a bug where custom attributes in a library cause the executable project
problems when building:
https://stackoverflow.com/questions/4461407/help-with-a-custom-view-attributes-inside-a-android-library-project -->
<com.me.numberpicker.NumberPickerPreference
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:my="http://schemas.android.com/apk/res/com.me.myapp.lib"
android:key="@string/pref_vibrateOffPeriodKey"
android:title="@string/pref_VibrateOffTitle"
android:summary="@string/pref_VibrateOffSummary"
my:maxValue="@string/MaxVibratorOffPeriodInS"
my:minValue="@string/MinVibratorOffPeriodInS"
android:defaultValue="@string/DefaultVibratorOffPeriodInS" />
MyPreferencesActivity.java
public class MegalarmPreferencesActivity extends PreferenceActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
所有字符串都在 lib 项目中正确定义。
如果我缺少任何东西,请告诉我。在我将项目拆分为 lib 和 main 之前,这些偏好工作正常。
非常感谢!肖恩