Fragment初学5——使用Fragment的子类PreferenceFragment
  Op9yysgqYUmV 2023年11月02日 60 0


在Android的应用中通常都有setting功能,能够设置一些全局的选项,例如字体颜色,个人喜好等等。这些东西都存在一个xml中,在android中对应的对象就是SharedPreferences。在android3.0之前,我们一般继承PreferenceActivity这个基类去实现相关的方法。在3.0之后的系统中当然选择使用PreferenceFragment了,原因是PreferenceFragment是一个更加平滑的结构,你可以将它依附在任何的activity上面,这也是谷歌强力推荐的。




常用Preference

CheckPreference —— CheckBox 单选框

EditTextPreference —— EditText 输入文本框

ListPreference —— ListView 列表框

RingtonePreference —— 选择铃声

XML定义常用的属性有:

android:key : 每个Preference控件独一无二的”ID”,唯一表示此Preference。

android:defaultValue : 默认值。 例如,CheckPreference的默认值可为”true”,默认为选中状态;

EditTextPreference的默认值可为”110” 。

android:enabled : 表示该Preference是否可用状态。

android:title : 每个Preference在PreferenceScreen布局上显示的标题——大标题

android:summary : 每个Preference在PreferenceScreen布局上显示的标题——小标题(可以没有)

ListPreference中:

android:entries:类型为array,控件欲显示的文本

android:entryValues:类型为array,与文本相对应的key-value键值对,value保存至sharedPreference文件


说完了,就开始介绍如何使用吧,

1、在项目的res/xml中新建一个preferences.xml。用于定义菜单界面的设置选项


<?xml version="1.0" encoding="utf-8"?>
 
 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
 
 

 
 
    <PreferenceCategory android:title="inline_preferences" >
 
 
        <CheckBoxPreference
 
 
            android:key="checkbox_preference"
 
 
            android:summary="这是一个复选框"
 
 
            android:title="复选框" />
 
 
    </PreferenceCategory>
 
 
    <PreferenceCategory android:title="dialog-based preferences" >
 
 
        <EditTextPreference
 
 
            android:dialogTitle="编辑文本对话框"
 
 
            android:key="edittext_preference"
 
 
            android:summary="这是一个编辑文本对话框"
 
 
            android:title="可编辑文本框" />
 
 

 
 
        <ListPreference
 
 
            android:dialogTitle="请选择一项"
 
 
            android:entries="@array/entries_list_preference"
 
 
            android:entryValues="@array/entryvalues_list_preference"
 
 
            android:key="list_preferenc"
 
 
            android:summary="这是一个列表对话框"
 
 
            android:title="列表对话框" />
 
 
    </PreferenceCategory>
 
 
    <PreferenceCategory android:title="Launch preferences" >
 
 

 
 
        <!-- This PreferenceScreen tag serves as a screen break (similar to page break in word processing). Like for other preference types, we assign a key here so it is able to save and restore its instance state. -->
 
 
        <PreferenceScreen
 
 
            android:key="screen_preference"
 
 
            android:summary="展示另一个首选项配置页面"
 
 
            android:title="页面首选项" >
 
 

 
 
            <!-- 你可以在这里放置更多的首选项内容,将被在下一个页面呈现出来 -->
 
 
            <CheckBoxPreference
 
 
                android:key="next_screen_checkbox_preference"
 
 
                android:summary="在另一个页面展示但出于同一个层级的首选项配置"
 
 
                android:title="复选框设置" />
 
 
        </PreferenceScreen>
 
 
        <PreferenceScreen
 
 
            android:summary="从一个意图中启动一个activity"
 
 
            android:title="意图首选项" >
 
 
            <intent
 
 
                android:action="android.intent.action.VIEW"
 
 
                android:data="http://www.baidu.com" />
 
 
        </PreferenceScreen>
 
 
    </PreferenceCategory>
 
 
    <PreferenceCategory android:title="Preference attributes" >
 
 
        <CheckBoxPreference
 
 
            android:key="parent_checkbox_preference"
 
 
            android:summary="这是一个可见的父类"
 
 
            android:title="父类复选框首选项" />
 
 
        <!-- 子类的可见类型是由样式属性定义的 -->
 
 
        <CheckBoxPreference
 
 
            android:dependency="parent_checkbox_preference"
 
 
            android:key="child_checkbox_preference"
 
 
            android:layout="?android:attr/preferenceLayoutChild"
 
 
            android:summary="这是一个可见的子类"
 
 
            android:title="子类复选框首选项" />
 
 
    </PreferenceCategory>
 
 

 
 
</PreferenceScreen>
 

 
2、创建MyPerferenceFragment.java
 

 
public class MyPerferenceFragment extends PreferenceFragment {
 
 

 
 
    @Override
 
 
    public void onCreate(Bundle savedInstanceState) {
 
 
        // TODO Auto-generated method stub
 
 
        super.onCreate(savedInstanceState);
 
 
        addPreferencesFromResource(R.xml.preferences); 
 
 
    }
 
 

 
 
}
 

 
3、修改MainActivity.java类
 
public class MainActivity extends Activity {
 
 

 
 
    @Override
 
 
    protected void onCreate(Bundle savedInstanceState) {
 
 
        super.onCreate(savedInstanceState);
 
 
        setContentView(R.layout.activity_main);
 
 

 
 
    }
 
 

 
 
    @Override
 
 
    public boolean onCreateOptionsMenu(Menu menu) {
 
 
        // Inflate the menu; this adds items to the action bar if it is present.
 
 
        getMenuInflater().inflate(R.menu.main, menu);
 
 
        return true;
 
 
    }
 
 

 
 
    @Override
 
 
    public boolean onOptionsItemSelected(MenuItem item) {
 
 
        if (item.getItemId() == R.id.action_settings) {
 
 
            FragmentManager fm = getFragmentManager();
 
 
            FragmentTransaction transaction = fm.beginTransaction();
 
 
            MyPerferenceFragment fragment = new MyPerferenceFragment();
 
 
            transaction.replace(R.id.lin, fragment);
 
 
            transaction.commit();
 
 
        }
 
 
        return super.onOptionsItemSelected(item);
 
 
    }
 
 
}


源代码

参考:

http://www.linuxidc.com/Linux/2013-09/90299.htm

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Op9yysgqYUmV