我正在为我的应用程序创建首选项,并注意到一些示例将 XML 存储在 res/layout 中,而其他示例将它们存储在 res/xml 中。是否有理由或最佳实践将它们存储在一个与另一个中?我的 res/layout 文件夹中已经有一堆布局文件,那么将首选项布局文件放在 res/xml 中是否有意义?
3 回答
Prefereces xmls 应该放在 res/xml 文件夹中。res/layout 仅适用于布局 xml。
这是来自谷歌。
将 res/xml/ 用于可在运行时通过调用 Resources.getXML()读取的任意 XML 文件。
Preference XML 文件位置的最佳实践必须如此处所述: “您必须将 XML 文件保存在 res/xml/ 目录中。尽管您可以为文件命名任何您想要的名称,但它通常命名为preferences.xml”。
虽然我找不到验证,但您的应用程序的自定义命名空间是 AndroidManifest.xml 文件中指定的包名称。
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mydomain.app"
您可以将此命名空间用于引用自定义控件和首选项的自定义 XML 属性。例如,在 XML 文件中包含如下内容:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myname="http://schemas.android.com/apk/res/com.mydomain.app"
在同一个 XML 文件中包含一些自定义组件:
<com.mydomain.app.MyListPreference
android:key="pref_item1"
android:title="@string/item1"
android:summary="@string/pref_mysummary"
myname:someAttr="500" />
someAttr 仍然需要在 attr.xml 文件的 values 文件夹中定义。attr 在组件的样式中声明如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="com.mydomain.app.MyListPreference">
<attr name="someAttr" format="integer" />
</declare-styleable>
</resources>
在定义自定义组件或首选项的类中,您可以使用以下方式获取属性:
mDefaultValue = attrs.getAttributeIntValue(
"http://schemas.android.com/apk/res/com.mydomain.app", ATTR_DEFAULT_VALUE, 50);