android 2.2 apidemos 赏析笔记 5

本文深入探讨了Android中Preference的应用方式,包括从XML文件加载偏好设置、依赖关系设定、默认值配置及通过代码创建偏好设置等内容,并介绍了如何实现自定义偏好项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=x-large]PreferencesFromXml.java[/size]

SEE:
1.

addPreferencesFromResource(R.xml.preferences);
2.R.xml.preferences.XML
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/inline_preferences">
<CheckBoxPreference
android:key="checkbox_preference"
android:title="@string/title_toggle_preference"
android:summary="@string/summary_toggle_preference" />
</PreferenceCategory>


<EditTextPreference
android:dialogTitle="@string/dialog_title_edittext_preference"


<ListPreference
android:entries="@array/entries_list_preference"
android:entryValues="@array/entryvalues_list_preference"


<PreferenceScreen
android:title="@string/title_intent_preference"
android:summary="@string/summary_intent_preference">

<intent android:action="android.intent.action.VIEW"
android:data="http://www.android.com" />

</PreferenceScreen>


<CheckBoxPreference
android:dependency="parent_checkbox_preference"
android:layout="?android:attr/preferenceLayoutChild"

SO:
具体的设置方法看代码


[size=x-large]PreferenceDependencies.java[/size]

SEE:
1.R.xml.preference_dependencies
android:dependency="wifi"
SO:
完。。

[size=x-large]DefaultValues.java[/size]
SEE:R.xml.default_values
1.
<CheckBoxPreference
android:defaultValue="true"
2.
<EditTextPreference
android:defaultValue="@string/default_value_edittext_preference"
3.
<ListPreference
android:defaultValue="@string/default_value_list_preference"
SO:
不同的Value设置。完。。。。


[size=x-large]PreferencesFromCode
[/size]

SEE:
1.
public class PreferencesFromCode extends PreferenceActivity {
2.
PreferenceCategory inlinePrefCat = new PreferenceCategory(this);
inlinePrefCat.setTitle(R.string.inline_preferences);
root.addPreference(inlinePrefCat);
3.
TypedArray a = obtainStyledAttributes(R.styleable.TogglePrefAttrs);
childCheckBoxPref.setLayoutResource(
a.getResourceId(R.styleable.TogglePrefAttrs_android_preferenceLayoutChild,
0));
a.recycle();
4.
inlinePrefCat.setTitle(R.string.inline_preferences);
5.
SO:
具体设置方法见代码。这里没有设置dependency 我设置了 parentCheckBoxPref.setKey("key1");
childCheckBoxPref.setDependency(parentCheckBoxPref.getKey());
都不行,奇怪。难道不可以从代码写,还是用XML好了。

[size=x-large]AdvancedPreferences.java[/size]

SEE:
PreferenceManager.setDefaultValues(this, R.xml.advanced_preferences, false);
SO:
从XML中设置默认值,而不是布局。。。RI


SEE:
1.
public class AdvancedPreferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
2.AdvancedPreferences.java
mCheckBoxPreference = (CheckBoxPreference)getPreferenceScreen().findPreference(
KEY_ADVANCED_CHECKBOX_PREFERENCE);
SO:
findViewById的PreferenceActivity版。。


SEE:
1.
mHandler.postDelayed(this, 1000);
2.
mForceCheckBoxRunnable.run();
3.

mHandler.removeCallbacks(mForceCheckBoxRunnable);
SO:
设置线程与运行。mHandler是控制的主线程,一秒后继续再次运行该Runnable,使用mHandler来取消。

SEE:
1.
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
2.
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
SO:
设置Preference监听与取消监听


SEE:
1.preference_widget_mypreference.xml
<TextView
android:id="@+id/mypreference_widget"
android:focusable="false"
android:clickable="false"
2.MyPreference.JAVA
setWidgetLayoutResource(R.layout.preference_widget_mypreference);
3.MyPreference.JAVA
final TextView myTextView = (TextView) view.findViewById(R.id.mypreference_widget);
if (myTextView != null) {
myTextView.setText(String.valueOf(mClickCounter));
}
SO:
神奇的设置,这里的TextView是用来显示数字的那个,不是整个preference的布局


SEE: MyPreference.JAVA 自定义preference的方法 MARK
1.
!callChangeListener(newValue)
2.
persistInt(mClickCounter);
3.
notifyChanged();
4.
protected Object onGetDefaultValue(TypedArray a, int index) {
// This preference type's value type is Integer, so we read the default
// value from the attributes as an Integer.
return a.getInteger(index, 0);
}
5.
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
6.
protected Parcelable onSaveInstanceState() {
7.
protected void onRestoreInstanceState(Parcelable state) {
8.
private static class SavedState extends BaseSavedState {
clickCounter = source.readInt();
dest.writeInt(clickCounter);
SO:
1.如果是invalid就不能改变。
2.保存值,
3.通知改变,观察者模式。
4.返回默认值
5.设置值的方法
6.有点扯不来了,这个是被临时破坏的时候,通过这个方法保存 同activity的那个。
7.回复值的时候调用
8.扯不来了,自己理解吧。。仿照下就好。。继承了该数据结构,外加一个附带的值就好。。
然后弄清楚读取和保存的地方就好。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值