android中包含Preference ListPreference EditTextPreference等控件布局的写法,已经操作各个控件的事件介绍,如下
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:layout="@layout/category_normal" android:title="@string/Nike" /> <ListPreference android:key="voice_reaction" android:dialogTitle="@string/voice_reaction" android:entries="@array/voices" android:entryValues="@array/voices_value" android:layout="@layout/schpwr_background_double_top" android:widgetLayout="@layout/pref_widget_more" android:defaultValue="@string/guan" android:title="@string/voice_reaction" /> <ListPreference android:key="nike_distance" android:dialogTitle="@string/nike_distance" android:entries="@array/distance" android:entryValues="@array/distance_value" android:layout="@layout/schpwr_background_double_middle" android:widgetLayout="@layout/pref_widget_more" android:defaultValue="@string/km" android:title="@string/nike_distance" /> <ListPreference android:key="nike_weight_list" android:dialogTitle="@string/nike_weight_list" android:entries="@array/weight_list" android:entryValues="@array/weight_list_value" android:layout="@layout/schpwr_background_double_middle" android:widgetLayout="@layout/pref_widget_more" android:defaultValue="@string/kg" android:title="@string/nike_weight_list" /> <EditTextPreference android:key="nike_weight" android:layout="@layout/schpwr_background_double_bottom" android:widgetLayout="@layout/pref_widget_more" android:defaultValue="0" android:title="@string/nike_weight" /> <PreferenceCategory android:layout="@layout/category_normal" android:title="@string/kongzhi" /> <Preference android:key="nike_intent" android:layout="@layout/nike_settings_header_roundcorner_item" android:title="@string/to_nike"> <intent android:action="android.intent.action.VIEW" android:data="http://www.android.com" /> </Preference> </PreferenceScreen>
NikeSettings.java
package com.android.settings; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; public class NikeSettings extends PreferenceActivity implements OnSharedPreferenceChangeListener { private Button mBtn; private TextView mText; private ListPreference voice_reaction; private ListPreference nike_distance; private ListPreference nike_weight_list; private EditTextPreference nike_weight; @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.settings_layout); addPreferencesFromResource(R.xml.nike_settings); ListView listView = this.getListView(); listView.setCacheColorHint(Color.TRANSPARENT); listView.setSelector(new ColorDrawable(Color.TRANSPARENT)); mText = (TextView)findViewById(R.id.general_title); mText.setText(R.string.Nike); mBtn = (Button)findViewById(R.id.back_settings); mBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); voice_reaction = (ListPreference)findPreference("voice_reaction"); nike_distance = (ListPreference)findPreference("nike_distance"); nike_weight_list = (ListPreference)findPreference("nike_weight_list"); nike_weight = (EditTextPreference)findPreference("nike_weight"); voice_reaction.setSummary(voice_reaction.getEntry()); nike_distance.setSummary(nike_distance.getEntry()); nike_weight_list.setSummary(nike_weight_list.getEntry()); nike_weight.setSummary(nike_weight.getText()+nike_weight_list.getEntry());
//改变ListPreference和EditTextPreference时,获取修改后的值并时时的改变summary的值 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.registerOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals("voice_reaction")) { voice_reaction.setSummary(voice_reaction.getEntry()); } else if (key.equals("nike_distance")) { nike_distance.setSummary(nike_distance.getEntry()); } else if (key.equals("nike_weight_list")) { nike_weight_list.setSummary(nike_weight_list.getEntry()); nike_weight.setSummary(nike_weight.getText()+nike_weight_list.getEntry()); } else if (key.equals("nike_weight")) { nike_weight.setSummary(nike_weight.getText()+nike_weight_list.getEntry()); } } }
value/array.xml
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string-array name="voices"> <item>男</item> <item>女</item> <item>关</item> </string-array> <string-array name="voices_value"> <item>nan</item> <item>nv</item> <item>guan</item> </string-array> <string-array name="distance"> <item>英里</item> <item>公里</item> </string-array> <string-array name="distance_value"> <item>mile</item> <item>km</item> </string-array> <string-array name="weight_list"> <item>磅</item> <item>公斤</item> </string-array> <string-array name="weight_list_value"> <item>pound</item> <item>kg</item> </string-array> </resources>