首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android中的首选项-它是如何知道的?

Android中的首选项-它是如何知道的?
EN

Stack Overflow用户
提问于 2012-07-12 11:14:09
回答 1查看 217关注 0票数 0

我正在学习如何在android应用程序中设置首选项。我有一个res/xml/prefs.xml文件,其中包含一些不同的组件(?)里面的东西。这是由Prefs.java引用的,它在其onCreate()方法中使用addPreferencesFromResource(R.xml.prefs);。据我所知,prefs.xml文件设置了首选项,而Prefs.java文件访问prefs.xml以给它提供逻辑(然后我将对其进行编程)。

然后在我的清单中,我有一个活动,如

代码语言:javascript
运行
复制
<activity
    android:name=".Prefs"
    android:label="Preferences" >
    <intent-filter>
        <action android:name="com.example.lesson1.PREFS" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

不太确定Manifest是否引用了Prefs.java,或者是相反的情况,或者是其他什么。

此外(目前最令人困惑的是),我还有另一个名为Splash.java的文件,它会显示一个闪屏。在闪屏的onCreate()上,它这样做:

代码语言:javascript
运行
复制
    MediaPlayer ourSong = MediaPlayer.create(Splash.this, R.raw.splash);
    SharedPreferences getPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext()); 
    boolean music = getPrefs.getBoolean("checkbox", true);
    if (music) {
        ourSong.start();
    }

我真的不确定这是如何知道首选项在哪里(它们中的任何一个,或者它引用的任何一个)。我从来没有告诉过它prefs.xml是首选项文件,或者它在哪里。那么,默认情况下,首选项是在res/xml/prefs.xml中,并且它会自动知道吗?

我只是对整个事情的顺序真的很困惑。哪个文件引用了哪个文件?清单是如何在这里发挥作用的(它似乎只是指向.java文件来告诉安卓应用程序它在那里,但我真的不知道)。最后,是否可以声明首选项位于不同的.java和.xml文件中,或者必须将它们命名为prefs.java/.xml?

谢谢,如果这让人困惑的话,我很抱歉。我自己也很困惑,不知道我在这里是不是完全有意义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-12 12:30:15

当你的应用被编译时,res文件夹中的各种东西都会被编译进去。在本例中,xml文件夹被识别为原始文件夹,并将R.xml.prefs添加到自动生成的代码中。

在运行时,这将被视为原始资源,并读取数据(它实际上是使用充气装置构建的,类似于布局充气装置的工作方式)。您实际上可以自己查看数据,使用...

代码语言:javascript
运行
复制
InputStream is = context.getResources().openRawResource(R.xml.prefs);

因此,在运行时,addPreferencesFromResource(R.xml.prefs)就足以加载首选项。

至于访问首选项,首选项存储在SharedPreferences中。我假设您有一个名为“SharedPreference”的首选项,所以当您调用getPrefs.getBoolean("checkbox", true)时,它将查找checkbox值,如果没有找到(因为尚未设置首选项),则返回true (第二个参数)。

这就是为什么保持默认设置的一致性对你来说非常重要。实际上,让一个类致力于与首选项交互可能是值得的,这样您就不会意外地在不同的地方默认不同的值。

在res文件夹中有很多自动生成的魔术。例如,每个人都使用res/values/strings.xml来存储字符串,但实际上文件名是什么并不重要。res/values/中的任何内容都可以读取和合并,并且每个文件可以是各种数据类型(字符串、整数、颜色等)的混合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11444540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档