对于每个应用程序来说,都要有一些属于用户自己的设置,满足不同需求。当我们点击menu时,如下:

点击settings时,出现:

那么这样的效果是怎么实现的呢?我只是来个简单介绍,给自己做备忘,也是给大家点思路吧。在android的路上,我们一起努力吧。
这里我们仅说第二个图片效果的实现,第一个图片的效果,想必大家都会了,就是使用menu类的几个方法就可以了。
1.PreferenceScreen 的使用。
首先要定义一下整个布局即使用xml文件夹下的preferences.xml。
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 如果拥有多个首选项,可以构建一个视图来显示首选项高级类别。用户然后就可以深入到每个类别,查看和管理特
定于该组的首选项。 可以通过两种方式来实现此目的。可以在根 PreferenceScreen中引入嵌套的 PreferenceScreen 元素,
或者可以使用 PreferenceCategory 来获得类似的结果。 -->
<PreferenceCategory android:title="@string/app_name"
android:summary="Application settings">
<EditTextPreference android:key="user_name"
android:defaultValue="@null"
android:title="@string/preference_username_title"
android:summary="@string/preference_username_summary" />
<ListPreference
android:key="download_format"
android:title="@string/preference_codec_title"
android:summary="@string/preference_codec_summary"
android:entries="@array/stream_codecs"
android:entryValues="@array/stream_codecs_values" />
<ListPreference
android:key="cache_option"
android:title="@string/preference_cache_title"
android:summary="@string/preference_cache_summary"
android:entries="@array/cache_size"
android:entryValues="@array/cache_size_values"/>
<CheckBoxPreference android:key="wifi_only"
android:defaultValue="false"
android:title="@string/preference_wifi_only_title"
android:summary="@string/preference_wifi_only_summary" />
<CheckBoxPreference android:key="roaming_protection"
android:defaultValue="true"
android:title="@string/preference_roaming_summary"
android:summary="@string/preference_roaming_summary" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/preference_3rdparty_title"
android:summary="@string/preference_3rdparty_summary">
<CheckBoxPreference android:defaultValue="false"
android:key="scrobbling_enabled" android:title="@string/scrobbling_enabled"/>
<ListPreference android:key="scrobbler_app" android:dependency="scrobbling_enabled" android:entries="@array/scrobbler_apps" android:title="@string/scrobbler_app" android:entryValues="@array/scrobbler_apps_values" android:summary="@string/scrobbler_app_summary"></ListPreference>
</PreferenceCategory>
<PreferenceCategory android:title="@string/gestures_preference_title"
android:summary="@string/gestures_preference_summary">
<CheckBoxPreference android:key="gestures"
android:defaultValue="true"
android:title="@string/gestures_support"
android:summary="@string/gestures_support_summary"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/preference_reset_title">
<Preference android:key="reset_firstrun" android:summary="@string/preference_firstrun_reset_summary" android:title="@string/preference_firstrun_reset_title"></Preference>
</PreferenceCategory>
</PreferenceScreen>
其中:
特性 说明
android:key 选项的名称或键(比如selected_flight_sort_option)
android:title 选项的标题
android:summary 选项的简短摘要
android:entries 可将选项设置成列表项的文本
android:entryValues 定义每个列表项的值。注意:每个列表项有一些文本和 一 个 值。 文本由
entries定义,值由entryValues定义。
android:dialogTitle 对话框的标题,在视图显示为模态对话框时使用
android:defaultValue 项列表中选项的默认值
在开发文档中这样定义PreferenceScreen, Represents a top-level Preference that is the root of a Preference hierarchy. 即显示了首选项组织体系的最顶级。
2.PreferenceActivity
A PreferenceActivity points to an instance of this class to show the preferences. 即我们通过实例化一个继承PreferenceActivity 的类来展示首选项,代码如下
public class SettingsActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState)
{ requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState); //添加设置,加入引用
addPreferencesFromResource(R.xml.preferences);
setContentView(R.layout.settings); }
}
关于布局文件settings.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000000"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/gradient_dark_purple" android:orientation="horizontal" android:gravity="center" android:minHeight="75dip"> <LinearLayout android:layout_height="wrap_content" android:minHeight="75dip" android:layout_width="fill_parent" android:orientation="horizontal" android:gravity="center_vertical" android:paddingLeft="13dip" android:paddingRight="13dip"> <ImageView android:layout_width="48dip" android:layout_height="48dip" android:src="@drawable/settings"></ImageView> <LinearLayout android:layout_height="wrap_content" android:paddingLeft="13dip" android:orientation="vertical" android:layout_width="fill_parent"> <TextView android:layout_width="wrap_content" android:singleLine="true" android:layout_height="wrap_content" android:textSize="18dip" android:textColor="#ffffff" android:text="@string/settings"></TextView> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12dip" android:textColor="#ffffff"></TextView> <TextView android:id="@+id/ItemsCountTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:textSize="12dip" android:textColor="#ffffff" android:text=" "></TextView> </LinearLayout> </LinearLayout> </LinearLayout> <ListView android:layout_width="fill_parent" android:id="@android:id/list" android:layout_weight="1" android:layout_height="fill_parent"> </ListView> </LinearLayout>
当我们点击其中某一项时,如cache option
效果:

用到了我们在res下定义的arrays.xml
其中部分内容如下:
<resources>
<string-array name="cache_size">
<item>Off</item>
<item>50 MB</item>
<item>100 MB</item>
<item>250 MB</item>
<item>500 MB</item>
</string-array>
<string-array name="cache_size_values">
<item>0</item>
<item>50</item>
<item>100</item>
<item>250</item>
<item>500</item>
</string-array>
</resources>
实在不明白的可以参考:http://byandby.iteye.com/blog/1045508 谢谢作者呵呵。
仅提供思路。
本文详细介绍Android应用中用户设置的实现方式,包括使用PreferenceScreen和PreferenceActivity进行配置,以及如何通过XML文件定义各种偏好选项,如文本输入、列表选择、开关等。同时解释了如何在布局文件中展示这些设置,并提供了关键属性的使用说明。
288

被折叠的 条评论
为什么被折叠?



