Android学习笔记(四十):Preference的使用

Android学习笔记(四十):Preference的使用

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Preference直译为偏好,博友建议翻译为首选项。一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择。Android提供preference这个键值对的方式来处理这样的情况,自己主动保存这些数据,并立时生效,同一时候Android提供一种类似的layout的方式来进行Prefernce的布局。

一个简单的Preferenece样例

步骤1:编写preference XML,在res/xml/下添�我们的preference XML文件,比如名字叫c21preference.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<!– preference的组织方式有PreferenceScreen和PreferenceCategory,PreferenceCategory是带层次组织关系,在后面的样例体验,而PreferenceScreen就是最平白和基础的方式 –>
<PreferenceScreen
xmlns:android=”http://schemas.android.com/apk/res/android”>
   
<!– 有四个基本组建,这个样例学习两个。里面的内容对比图,非常easy理解,RingtonePreference是选择铃音,这里给出两个选择,系统默认的铃音和无声 –>
    <CheckBoxPreference android:key=”
checkbox
        android:title=”
CheckBox Preference
        android:summary=”
Check it on , check it off”/>
    <RingtonePreference android:key=”
ringtone
        android:title=”
Ringtone Preference
        android:showDefault=”
true
        android:showSilent=”
true
        android:summary=”
Pick a tone, any tone“/>
</PreferenceScreen>

步骤2:在java源码中调用该xml,生成对应的preference界面

public class Chapter21Test1 extendsPreferenceActivity{
  
 @Override
    protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.c21preference);
    }
}

Android学习笔记(四十):Preference的使用 Android学习笔记(四十):Preference的使用

和用layout方式一样,代码非常easy。和以往界面最大的差别是,我们对checkbox进行选择或者对ringtone进行选择后,这个选择结果是被保留的,当我们退出actitvity后再次进入,上次的选项依旧保留,我们又一次向模拟器load应用,发现之前的选项仍然存在。我们能够利用preference,而无须人工对数据进行保存和读取,非常是方便。

步骤3:获取preference的数据

处了在preference的界面中可以保留数据,我们也希望可以读出数据,以便这些数据可以用在其它的activity中。假设还有一个activity和这些数据关联,并且希望可以实时进行同步,在onResume()中对preference保留的数据进行读取,而后进行相关的更新。

首先要获取preferences,然后通过键值对的获取方式依据key获取数值,在xml中checkbox的key为“checkbox”,值的类型为布尔值,而rintong的值为String,比如:

    protected void onResume() { //在还有一个Activity中
       
super.onResume();
        SharedPreferences prefs =PreferenceManager.getDefaultSharedPreferences(this) ;
        System.out.println(new Boolean(prefs.getBoolean(“
checkbox“,false)).toString());//false表示没有查到checkbox这个key的返回值
        System.out.println(prefs.getString(“
ringtone“,”<unset>”));//<unset>表示没有查到ringtong这个key的返回值
    }

获取preferences能够通过三种方式:
一、getPreferences():能够获取同一activity中的preference;
二、getSharedPreferences():能够获取映用级别的preferences(),在这个样例中因为我们封装在同一app中,也能够使用SharePreferences prefs = getSharedPreferences( “com.wei.android.learning_preferences” ,0);当中第一个參数name的格式是<package_name>_preferences;
三、getDefaultSharedPreferences():就是我们样例的方式,通过Android的偏好管理器来获取其所管理的preferences。

Preferenece数据的操作

在上面的样例中,preference的数值会被保留,并且能够在其它的activity中读取。假设须要清除数据,能够通过remove()清除某个名字的prefernece,clear()清除全部的preferences。我们能够通过edit()获取preferences的editor,进而进行编辑,改动后,通过commit()将改动值保存。

Android学习笔记(四十):Preference的使用Preferenece XML

Preference的XML能够通过PreferenceCategory来进行组织。PreferenceCategory能够将几个组建组合在一起,并加上标题。我们依旧用前面的xml样例,通过PreferenceCategory来进行组织,例如以下:和之前的样例比較,将chekcbox和rintong组织成为一个category,并加上了”simple Preferences”的标题。

<?xml version=”1.0″ encoding=”utf-8″?>
<PreferenceScreen
xmlns:android=”http://schemas.android.com/apk/res/android”>
       <PreferenceCategory android:title=”Simple Preferences”>
            <CheckBoxPreference android:key=”checkbox” …./>
            <RingtonePreference android:key=”ringtone” … />

       </PreferenceCategory>
</PreferenceScreen>

PreferenceCategory也能够嵌套PreferenceScreen,PreferenceScreen中的内容,将通过还有一屏来显示,我们在上面样例后面加入�一个嵌套了PreferenceScreen的PreferenceCategory。整个PreferenceScreen作为一个组件出现,点击后新的一屏,由入PreferenceScreen定义。通过这个关系,我们能够组织自己的preference架构。

<?xml version=”1.0″ encoding=”utf-8″?>
<PreferenceScreen
xmlns:android=”http://schemas.android.com/apk/res/android”>
       <PreferenceCategory android:title=”Simple Preferences”>
            <CheckBoxPreference android:key=”checkbox” …./>
            <RingtonePreference android:key=”ringtone” … />
       </PreferenceCategory>

       <PreferenceCategory android:title=”Detail Screens”>
           <PreferenceScreen android:title=”Detail”
               android:summary=”Addtional preference help in another page”>
               <CheckBoxPreference
android:key=”checkbox2″
                   android:title=”Another Checkbox”
                   android:summary=”On or Off, It’s a problem….”
/>
           </PreferenceScreen>
       </PreferenceCategory>
</PreferenceScreen>

Android学习笔记(四十):Preference的使用 Android学习笔记(四十):Preference的使用

在前面的样例中我们使用了CheckBox和Ringtong,在以下的样例,我们实验另外的两个组建EditText和List,这两种都是已弹框的方式。在上面的样例我们继续添加�内容

<?xml version=”1.0″ encoding=”utf-8″?>
<PreferenceScreen …>
       ……     

       <PreferenceCategory android:title=”Other Preferences”>
           <EditTextPreference android:key=”text”
               android:title=”
Text Entry Dialog
               android:summary=”
Click to pop up a field for entry
               android:dialogTitle=”
Enter something useful“/>
           <ListPreference android:key=”list”
               android:title=”
Selection Dialog
               android:summary=”
Click to pop yo a list for select
               android:entries=”@array/cities”
               android:entryValues=”@array/airport_codes”

               android:dialogTitle=”
Choose a City“/>
       </PreferenceCategory>
</PreferenceScreen>

在list中由两个引用@array/cities和@array/airport_codes,我们在资源文件里定义此两array。内容例如以下:
<resource>
     <string-array>
        <item>Pittsburgh</item>
        <item>Allentown/Bethlehem</item>
        <item>Erie</item>
        … …
    </string-array>
    <string-array name=”airport_codes”>
        <item>PHL</item>
        <item>PIT</item>
        <item>ABE</item>
        … …
    </string-array>
</resources>

Android学习笔记(四十):Preference的使用

执行结果如右图所看到的。对于EditText,键值对保存的值是String,即用户在输入框中输入的内容。List的情况略微复杂一些,在设置ListPreference的属性有一个entires,这是在List显示给用户看的内容,假设我们去获取preference的值,在这个样例为prefs.getString(“list”, “<unset>”);,则返回在entryValues相应的数值,比如我们选择了第一个item:Pittsburgh,则获取的值为PHL。entries和entryValues是一一相应的。

相关链接: 我的Android开发相关文章

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118263.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ODT下载安装步骤「建议收藏」

    ODT下载安装步骤「建议收藏」ODT下载安装步骤

    2025年10月9日
    6
  • 微信小程序获取openid返回40029的一种错误情况

    微信小程序获取openid返回40029的一种错误情况微信小程序返回40029的情况原因有很多,遇到后大概总结了几个已知的1.小程序里传到后台的code被微信的调用接口使用了两次(只能使用一次)2.appid、AppSecret的值不对(这个自己复制感觉一般不会错)3.自己遇到的最难受的原因:创建项目的appid跟你请求url里的appid、AppSecret不是同一组起因:刚开始学习的时候,自己注册了一个小程序账号,第一个项目用的这…

    2022年6月4日
    49
  • 高斯,拉普拉斯分布

    高斯,拉普拉斯分布一般来说我们可以使用正则化来避免过度拟合 但是实际上什么是正则化 什么是通用技术 以及它们有何不同 正规化是我们对学习算法所做的任何修改 旨在减少其泛化误差 而不是其训练误差 换句话说 通过防止算法过度拟合训练数据集 可以将正则化用于训练对看不见的数据更好地泛化的模型 那么 如何修改逻辑回归算法以减少泛化误差呢 我发现的常见方法是高斯 拉普拉斯 L1 和 L2 高斯还是 L2 拉普拉斯还是 L1 这有什么不同吗 可以证明 L2 和高斯或 L1 和拉普拉斯正则化对算法具有同等影响 获得正则化效果的方法有两种

    2025年6月21日
    3
  • java编程常用软件

    java编程常用软件有大神曾说“给我一个记事本,我还你一个项目”,作为小白的我,以前也对这句话深信不疑,但当我参加人生第一次编程考试的时候,我发现我用记事本码代码的速度实在是太慢了,一样的代码,别人用eclipseIED编写用了5分钟,而我至少半小时。虽然有点强行甩锅IDE的嫌疑,但有款好的编程软件,就会让你打代码速度更快,让你的头发掉的更少……废话讲完了,以下是我推荐的几款编程常用软件:…

    2022年6月14日
    39
  • phy芯片测试寄存器_MII的PHY芯片上100M调试总结

    phy芯片测试寄存器_MII的PHY芯片上100M调试总结严重声明 本人以无野心搞其他 此篇是作为一名业余网络爱好者所学所遇所想 学习交流之用 与工作无关 亦没有他心 实为学习进程之步骤 无论学习还是工作都要认真对待 工作就是工作 爱好永远是爱好 泾渭分明了 首先要致谢 TreyParker 是他推荐的一篇帖子 解开了 3 个日夜来的困惑 最近在焊接 MII 的 PHY 芯片的时候总是满心欢喜的希望自己焊接完毕一 ping 就可以通了 但是万万没想到的是盼来了 time

    2025年7月11日
    5
  • 程序猿接私活经验总结,来自csdn论坛语录

    程序猿接私活经验总结,来自csdn论坛语录

    2021年11月15日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号