由于需要修改下设置里面的某个东西,花了两天看了下这个应用,下面是当时看 的一些资料记录下。
Android Fragments
http://www.cnblogs.com/TerryBlog/archive/2012/02/17/2355753.html
菜鸟Android4.0 Settings分析(一)
http://blog.csdn.net/wu_shu_jun/article/details/8514465
http://blog.csdn.net/eyu8874521/article/details/8250611
listView和ListAdapter
http://www.cnblogs.com/LT-blogs/archive/2012/08/08/2627932.html
LayoutInflater
http://blog.sina.com.cn/s/blog_629b701e0100rg4d.html
http://wenku.baidu.com/view/1c1a40bcf121dd36a32d8247.html
http://android.tgbus.com/Android/tutorial/201104/348009.shtml
http://blog.163.com/android_2012/blog/static/20951418720126195847197/
Android Switch控件介绍
http://blog.csdn.net/welovesunflower/article/details/7990670
onSaveInstanceState
Android中Preference的使用以及监听事件分析
http://blog.csdn.net/qinjuning/article/details/6710003
http://blog.csdn.net/ixiaobu/article/details/8609935
PreferenceFragment
以列表的形式分层显示 Preference,在用户交互改变这些 Preference 的时候, Preference 将会自动的保存到SharedPreferences;而如果我们要获取 在一个fragment里面将要使用的某个preference层的一个SharedPreferences的实例,我们可以使用 getDefaultSharedPreferences(android.content.Context)方法,参数是和这个fragment相同的一个上下文
还有一个比较重要的就是android的文档,里面讲的比上面的都详细,不过是英文的
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <!-- opens a subscreen of settings --> <PreferenceScreen android:key="button_voicemail_category_key" android:title="@string/voicemail" android:persistent="false"> <ListPreference android:key="button_voicemail_provider_key" android:title="@string/voicemail_provider" ... /> <!-- opens another nested subscreen --> <PreferenceScreen android:key="button_voicemail_setting_key" android:title="@string/voicemail_settings" android:persistent="false"> ... </PreferenceScreen> <RingtonePreference android:key="button_voicemail_ringtone_key" android:title="@string/voicemail_ringtone_title" android:ringtoneType="notification" ... /> ... </PreferenceScreen> ... </PreferenceScreen>像Preference 可以在自己实现如
public class IconPreferenceScreen extends Preference {
private Drawable mIcon;
public IconPreferenceScreen(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public IconPreferenceScreen(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setLayoutResource(R.layout.preference_icon);
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.IconPreferenceScreen, defStyle, 0);
mIcon = a.getDrawable(R.styleable.IconPreferenceScreen_icon);
}
@Override
public void onBindView(View view) {
super.onBindView(view);
ImageView imageView = (ImageView) view.findViewById(R.id.icon);
if (imageView != null && mIcon != null) {
imageView.setImageDrawable(mIcon);
}
}
}
然后xml文件这么写
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:title="@string/settings_label"
android:layout="@layout/main"
android:key="parent">
<com.android.settings.IconPreferenceScreen
settings:icon="@drawable/ic_settings_date_time"
android:title="@string/date_and_time_settings_title"
android:summary="@string/date_and_time_settings_summary">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.android.settings"
android:targetClass="com.android.settings.datetime.DateTimeSettings" />
</com.android.settings.IconPreferenceScreen>
2、如果是3.0之后的版本,我们可以使用Fragments和Headers属性, Fragments是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有 更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity 管理的back stack 中保存些变化
Fragments 设计理念
在设计应用时特别是Android 应用 ,有众多的分辨率要去适应,而fragments 可以让你在屏幕不同的屏幕上动态管理UI。例如:通讯应用程序(QQ),用户列表可以在左边,消息窗口在右边的设计。而在手机屏幕用户列表填充屏幕当点击 某一用户时,则弹出对话窗口的设计,如下图:
为了使用Headers,我们需要:
a、把各个组定义为一个
PreferenceFragment,每个组需要其相应的xml
b、创建xml Headers文件,显示各个组,并且定义各个组相应的设置显示。
c、把你的settign应用继承自PreferenceAcitvity
d、实现onBulidHeaders回调来添加headers文件。
a、
public static class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } ... }相应的xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
android:key="hdmi"
android:title="@string/hdmi_title"
android:defaultValue="true"/>
<ListPreference
android:key="hdmi_lcd_timeout"
android:title="@string/hdmi_lcd_timeout"
android:entries="@array/hdmi_lcd_timeout_entries"
android:entryValues="@array/hdmi_lcd_timeout_values"
/>
</PreferenceScreen>
b、
创建headers文件
<?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne" android:title="@string/prefs_category_one" android:summary="@string/prefs_summ_category_one" /> <header android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo" android:title="@string/prefs_category_two" android:summary="@string/prefs_summ_category_two" > <!-- key/value pairs can be included as arguments for the fragment. --> <extra android:name="someKey" android:value="someHeaderValue" /> </header> </preference-headers>
c和d
public class SettingsActivity extends PreferenceActivity { @Override public void onBuildHeaders(List<Header> target) { loadHeadersFromResource(R.xml.preference_headers, target); } }