Preference相关学习
来源:互联网 发布:360n5手机怎么样 知乎 编辑:程序博客网 时间:2024/05/22 00:28
(1)Preference类学习
javacode:
importandroid.content.SharedPreferences;
//先获取SharedPreferences对象,获取这个对象有三种方法。
//第一种方法是PreferenceManager类的抽象方法,获取到的是通过Android的偏好管理器来获取其所管理的preferences。只有第一种方式可以获取到res/xml下配置的preferenceXML信息。
SharedPreferencesprefs=PreferenceManager.getDefaultSharedPreference(Context);
SharedPreferencesprefs=getSharedPreferences("data",MODE_PRIVATE);
SharedPreferencesprefs=getPreferences(MODE_PRIVATE);
//
res/xml下preferenceXML文件
新建xxx.xml
使用标签<PreferenceScreen></PreferenceScreen>
<PreferenceCategory></PreferenceCategory>
组件标签有
<Preference/>//相当于TextView
<CheckBoxPreference/>
<SwitchPreference/>
<EditTextPreference/>//弹框方式
<ListPreference/>//弹框方式
<RingtonePreference/>
组件标签常用的属性有
android:key=”xxx”//key如果不设置的话也可以,但是没设置key的组件不会保留之前的选中的状态。实测是这样的
android:title=”xxx”
android:summery=”xxx”
android:defaultValue=”xxx“//例如,CheckPreference的默认值可为”true”,默认为选中状态;
EditTextPreference的默认值可为”110”
android:enabled: 表示该Preference是否可用状态。
android:persistent: 表示Preference元素所对应的值是否写入sharedPreference文件中,如果是true,则表示写入;否则,则表示不写入该Preference元素的值。
android:dependency: 表示一个Preference(用A表示)的可用状态依赖另外一个Preference(用B表示)。B可用,则A可用;B不可用,则A不可用。比如两个页面的两个相互关联状态。
android:disableDependentsState: 与android:dependency相反。B可用,则A不可用;B不可用,则A可用。
获取SharedPreferences对象中保存的key-value值
prefs.getString(“keyname”,defValue);//前面是key字符串,后面是默认没找到给的默认值。
如何把自定义的xml文件添加到Activity中
首先要使用PreferenceActivity或者PreferenceFragment
调用api
addPreferencesFromResource(R.xml.xxx);
SharedPreference生成的文件路径
data/date/packagename(包名)/packagename_preferences.xml这个是使用res/xml那种方式生成的文件
SharedPreferencesprefs=getSharedPreferences("data",MODE_PRIVATE);
data/date/packagename(包名)/data.xml
SharedPreferencesprefs=getPreferences(MODE_PRIVATE);
data/date/packagename(包名)/当前Activity的类名.xml
代码中实例
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferencet1);
SharedPreferencesprefs =PreferenceManager.getDefaultSharedPreferences(this) ;
//获取Preference对象的方法,也就是xml文件中的各个组件
PreferencemPreference=getPreferenceManager().findPreference("checkbox");
//常用api有getKey() setKey() getSummary() setSummary()
mPreference.setKey("sbcheckbox");
//给Preference设置点击事件实现Activity跳转(代码中实现和xml文件中实现,回头再研究)
Log.e("key",mPreference.getKey());
Log.e("list",""+prefs.getString("list", "what??"));
//ListPreference设置默认选中项
publicvoidsetValueIndex(intindex) {
if(mEntryValues!=null){
setValue(mEntryValues[index].toString());
}
}
(2)如何在PreferenceActivityor PreferenceFragment的布局中添加图片
因为不是用的setContentLayout(R.layout.xxx)
而是addPreferencesFromResource(R.xml.xxx)诸如此类的api。
res/xml下的xml文件并不接受ImageView这样的控件。一般都是Preference标签。
那么我们只有自定义类
publicclass PicturePreference extends Preference {
privateContext mContext;
publicPicturePreference(Context context, AttributeSet attrs, int defStyle){
super(context,attrs, defStyle);
this.mContext= context;
//TODO Auto-generated constructor stub
}
publicPicturePreference(Context context, AttributeSet attrs) {
this(context,attrs, 0);
//TODO Auto-generated constructor stub
}
publicPicturePreference(Context context) {
this(context,null, 0);
//TODO Auto-generated constructor stub
}
@Override
publicView onCreateView(ViewGroup parent) {
LayoutInflaterinflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewmyView = inflater.inflate(R.layout.picture_item,
null);
returnmyView;
}
}
然后在res/xml的文件中添加标签,和自定义组件添加到布局文件中有点像,要加上完整的包名。
<com.example.test.PicturePreference
android:key=”picture”>
</com.example.test.PicturePreference>
有时候图片涉及到横屏,竖屏。那么要分别在res/layout,res/layout-land中加上同名的文件(picture_item.xml,中间引用的图片资源修改下就行了,分别对应横屏,竖屏的)。横屏的图片,竖屏的图片放在同一个res/drawale-xxx目录下就行了。
(3)EditText,TextView,EditTextPreference中设置限制字符个数
xml文件中android:maxLength=”3”
或者代码中:
mEditText.setFilters(newInputFilter[]{
newInputFilter.LengthFilter(4)
});
有时候碰到EditTextPreference对象,要求限制它的输入个数。
因为这个类封装了一个EditText在里面,所以想法获取这个EditText.
刚好EditTextPreference类提供了
publicEditText getEditText() {
returnmEditText;
}
那么我们在哪去设置这个mEditText的属性呢?肯定不能在这个EditText显示后再设置。
我们可以自定义类MyEditTextPreferenceextends EditTextPreference
已知publicclassEditTextPreferenceextendsDialogPreference {}
我们重写它的onCreateDialogView()方法。
protectedView onCreateDialogView() {
//set the dialog layout
setDialogLayoutResource(R.layout.pref_dialog_editpin);
Viewdialog = super.onCreateDialogView();
getEditText().setFilters(newInputFilter[]{
newInputFilter.LengthFilter(4)
});
returndialog;
}
这样就ok了。
(4)对于package/apps/Settings里面的SettingsPreferenceFragment
有一个方法setHasOptionsMenu(booleanshow);
实际这个方法是Fragment中封装好了的。
用来控制是否显示overflow的那个3个点的btn
(5)对于package/apps/Settings想要移除Preference某一项的时候
removePreference(KEY_AUTO_ROTATE);形参是key
实现在SettingsPreferenceFragment.java中
protectedvoid removePreference(String key) {
Preferencepref = findPreference(key);
if(pref != null) {
getPreferenceScreen().removePreference(pref);
}
}
- Preference相关学习
- android Preference相关样式修改
- APIDEMO PREFERENCE 学习 ACTIVTIY
- 学习Preference使用
- 学习Preference使用!!
- Preference学习总结
- Android Preference的学习
- Android之 Preference的学习
- Android之 Preference的学习
- [Android学习] preference知识精华
- Preference的 相关类 及 常用方法
- Preference
- Preference
- Preference
- Preference
- Preference
- Android应用Preference相关及源码浅析(Preference组件家族篇)
- Android应用Preference相关及源码浅析(Preference组件家族篇)
- BZOJ-1588 营业额统计 Treap裸题
- Android Paint的简单实用
- ubuntu上第一个shell脚本
- 多线程笔记
- Android源码APK剥离到eclipse调试运行教程
- Preference相关学习
- 互联网行业岗位职责
- 浅谈.net remoting 与 webservice
- openwrt上移植NFS服务器
- nginx进程模型
- 浅析Java中的final关键字
- 反向投影误差的计算
- 面---经2
- windows批处理中的%errorlevel%与!errorlevel!