日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PreferenceActivity使用介绍

發布時間:2023/12/9 编程问答 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PreferenceActivity使用介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一,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官方介紹文檔:

https://developer.android.com/reference/android/preference/PreferenceActivity.html

三,PreferenceActivity的使用

3.1,在res下新建xml目錄,在xml目錄下新建PreferenceActivity需要的布局文件setting.xml(使用PreferenceScreen?最為根節點)

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <ListPreferenceandroid:key="setting_language_preference"android:title="語言設置"android:entries="@array/language_entries"android:entryValues="@array/language_values"android:summary="支持:普通話,粵語,英語,德語,法語"android:defaultValue="mandarin" /><EditTextPreferenceandroid:key="setting_preference" android:title="連接超時" android:dialogTitle="請輸入時間(0-10000)ms"android:summary="默認值1800"android:defaultValue="1800" /><CheckBoxPreferenceandroid:key="@string/pref_key_translate"android:title="Love me ?"android:defaultValue="false" /></PreferenceScreen>

在res/values/strings.xml文件中新建以上需要的資源數據

<string-array name="language_entries"><item>普通話</item><item>粵語</item><item>英語</item><item>俄語</item><item>法語</item> </string-array> <string-array name="language_values"><item>mandarin</item><item>cantonese</item><item>en_us</item><item>russian</item><item>french</item> </string-array> <string name="pref_key_translate">love_me</string>

3.2,創建PreferenceActivity的子類SettingActivity

public class SettingActivity extends PreferenceActivity {public static final String PREFER_NAME = "setting";private EditTextPreference mVadbosPreference;@SuppressWarnings("deprecation")public void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);getPreferenceManager().setSharedPreferencesName(PREFER_NAME);addPreferencesFromResource(R.xml.setting);mVadbosPreference = (EditTextPreference)findPreference("setting_preference");}}

3.3,運行看一下效果圖如下:?

?

注意:運行時候,會自動在/data/data/<packagename>/shared_prefs/目錄生成一個文件名為setting文件;

四,PreferenceActivity分別和ListFragment,PreferenceFragment組合使用

PreferenceFragment官方文檔:

https://developer.android.com/reference/android/preference/PreferenceFragment

4.1,在res下新建xml目錄,在xml目錄下新建PreferenceActivity需要的布局文件activity_settings.xml(使用preference-headers

?最為根節點,通過header引入Fragment)

<?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"><header android:fragment="com.ang.demo.ui.fragment.ListFragmentSettings"android:icon="@drawable/ic_launcher"android:title="Settings"android:summary="真球忙"></header><headerandroid:fragment="com.ang.demo.ui.fragment.PreferenceFragmentTest"android:title="PreferenceFragmentTest"></header><headerandroid:icon="@mipmap/ic_launcher"android:summary="view baidu website"android:title="baidu"><intentandroid:action="android.intent.action.VIEW"android:data="https://m.baidu.com/" /></header> </preference-headers>

注意:header各個屬性的功能作用;

上面header引入ListFragment的子類ListFragmentSettings代碼:

public class ListFragmentSettings extends ListFragment {protected ArrayAdapter<String> mAdapter;protected String mData[];public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mData = getActivity().getResources().getStringArray(R.array.contries);mAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_single_choice, mData);setListAdapter(mAdapter);}public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_radio_zone_settings, container,false);return view;}public void onListItemClick(ListView l, View v, int position, long id) {super.onListItemClick(l, v, position, id);} }

上面header引入PreferenceFragment的子類PreferenceFragmentTest代碼:

public class PreferenceFragmentTest extends PreferenceFragment {@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//從xml文件加載選項addPreferencesFromResource(R.xml.fragment_preference_test);} }

fragment_preference_test布局文件(也是在res/xml/目錄下)

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><!-- 設置的類別 --><PreferenceCategoryandroid:key="mylocation"android:summary="我的位置源"android:title="我的位置"><CheckBoxPreferenceandroid:key="wireless_network"android:title="使用GPS"android:summary="使用Gps查看應用的位置"/></PreferenceCategory><PreferenceCategoryandroid:key="mymsg"android:summary="個人信息s"android:title="個人信息"><EditTextPreferenceandroid:key="myname"android:title="請輸入真實姓名"android:summary="姓名"/></PreferenceCategory></PreferenceScreen>

?4.2,創建PreferenceActivity的子類PreferenceActivityTest(名字都是隨便起的)

public class PreferenceActivityTest extends PreferenceActivity {private static List<String> fragments = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (hasHeaders()) {Button button = new Button(this);button.setText("Exit");setListFooter(button);}}@Overridepublic void onBuildHeaders(List<Header> target) {loadHeadersFromResource(R.xml.activity_settings, target);//從xml文件加載Preference選項fragments.clear();for (Header header : target) {fragments.add(header.fragment);}}//android 4.3以上版本需要做驗證,驗證方式有很多 https://www.manongdao.com/article-73175.html@Overrideprotected boolean isValidFragment(String fragmentName) {return fragments.contains(fragmentName);} }

4.3,運行后的效果圖:

?注意:ListFragment導入import?android.app.ListFragment;別導入V4包下的(切記哦),如果導入V4包下的會出現??java.lang.ClassCastException異常;詳細詳細異常信息:

java.lang.RuntimeException:Unable to start activity ComponentInfo{com.ang.demo/com.ang.demo.ui.activity.PreferenceActivityTest}: android.app.Fragment$InstantiationException: Trying to instantiate a class com.ang.demo.ui.fragment.ListFragmentSettings that is not a Fragment

五,Preference數據獲取

以上都是Preference的使用和保存數據;如何獲取Preference的數據呢;其實和shardpreference獲取數據一樣;通過key獲取;

總結

講了這么多,其實都是?Preference的子類在PreferenceActivity和PreferenceFragment中的應用;以上實現設置的功能,谷歌官方文檔推薦使用androidx包下的Preference及子類和PreferenceFragmentCompat;總是還是v4 v7 v13等support?庫遷移androidx的問題;

總結

以上是生活随笔為你收集整理的PreferenceActivity使用介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。