一,Preference介绍
二,PreferencesActivity介绍
三,PreferenceActivity的使用
四,PreferenceActivity分别和ListFragment,PreferenceFragment组合使用
五,Preference数据获取
总结
一,Preference介绍
Android的preference以键值对的来处理这种情况:自动保存设置的数据,并立时生效,而这种使用android sharedpreferences进行保存的,不需要们手动来写sharedpreferences;
常见的Preference控件有:
直接子类:DialogPreference, PreferenceGroup, RingtonePreference, TwoStatePreference
非直接子类:CheckBoxPreference, EditTextPreference, ListPreference, MultiSelectListPreference, PreferenceCategory, PreferenceScreen, SwitchPreference
二,PreferencesActivity介绍
Android中专门用来实现程序设置界面及参数存储的一个Activity。从Android 3.0以后不再推荐直接让PreferenceActivity加载选项设置布局文件,而建议使用PreferenceFragment(此类在API级别28中已弃用。替代类androidx库下的PreferenceFragmentCompat,有关androidx的问题有很多,这里不过多介绍 ),二者用法类似。PreferenceActivity在API级别29中已被弃用。PreferenceActivity与普通的Activity不同,它不使用界面布局文件,而使用选项设置的布局文件。
PreferencesActivity介绍文档:
三,PreferenceActivity的使用
3.1,在res下新建xml目录,在xml目录下新建PreferenceActivity需要的布局文件l(使用PreferenceScreen 最为根节)
在res/l文件中新建以上需要的资源数据
普通话
粤语
英语
俄语
法语
收纳技巧 mandarin
cantone
en_us
russian
french
love_me
3.2,创建PreferenceActivity的子类SettingActivity
不忘初心英文public class SettingActivity extends PreferenceActivity {
public static final String PREFER_NAME = "tting";
private EditTextPreference mVadbosPreference;
@SuppressWarnings("deprecation")
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);尼尔斯
Create(savedInstanceState);
getPreferenceManager().tSharedPreferencesName(PREFER_NAME);
l.tting);
mVadbosPreference = (EditTextPreference)findPreference("tting_preference");
}
}
3.3,运行看一下图如下:
注意:运行时候,会自动在/data/data//shared_prefs/目录生成一个文件名为tting文件;
四,PreferenceActivity分别和ListFragment,PreferenceFragment组合使用
PreferenceFragment文档:
精液不液化
4.1,在res下新建xml目录,在xml目录下新建PreferenceActivity需要的布局文件l(使用preference-headers
最为根节,通过header引入Fragment)
public class ListFragmentSettings extends ListFragment {
protected ArrayAdapter mAdapter;
protected String mData[];
public void onCreate(Bundle savedInstanceState) {
Create(savedInstanceState);
mData = getActivity().getResources().getStringArray(ies);
mAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_single_choice, mData);
tListAdapter(mAdapter);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_radio_zone_ttings, container,fal);
return view;
}
public void onListItemClick(ListView l, View v, int position, long id) {
ListItemClick(l, v, position, id);
啃老一族
}
}
上面header引入PreferenceFragment的子类PreferenceFragmentTest代码:
public class PreferenceFragmentTest extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Create(savedInstanceState);
//从xml文件加载选项罗汉饼
l.fragment_preference_test);
}
}
fragment_preference_test布局文件(也在res/xml/目录下)
4.2,创建PreferenceActivity的子类PreferenceActivityTest(名字都随便起的)
public class PreferenceActivityTest extends PreferenceActivity {
private static List fragments = new ArrayList();
@Override陪我数星星
protected void onCreate(Bundle savedInstanceState) {
Create(savedInstanceState);
if (hasHeaders()) {
Button button = new Button(this);
button.tText("Exit");
tListFooter(button);
}
}
@Override
public void onBuildHeaders(List target) {
l.activity_ttings, target);//从xml文件加载Preference选项
fragments.clear();
for (Header header : target) {
fragments.a(header.fragment);
}
}
//android 4.3以上版本需要验证,验证有很多
年假计算
@Override
protected boolean isValidFragment(String fragmentName) {
ains(fragmentName);