Settings设置页面的Preference使用方法

PreferenceActivity创建和使用比较复杂,Android官方现在不建议使用了,使用Preference和fragment的结合更加便利地写出一个settings页面,下面来介绍PreferenceScreen和fragment结合方法,对于直接创建PreferenceActivity的方法,这里我就不讲了!

1. 首先,我们新建一个资源文件,类型是Preference,为了方便管理我们在res资源文件夹里新建一个名为xml的文件夹,存放我们的资源文件
这里写图片描述

鼠标右键xml/new/xml resouce file,我们新建一个settingsfragment.xml文件
这里写图片描述

在settingsfragment.xml文件中写上你想要的样式,这里写一个小示例:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
        android:key="categoryOne"
        android:title="General">
        <Preference
            android:key="prefAndroid"
            android:title="安卓"
            android:summary="点一下更新内容"/>
        <Preference
            android:key="prefIos"
            android:title="IOS"
            android:summary="可以作为一个设置项"/>
        <CheckBoxPreference
            android:key="prefCheckBoxOne"
            android:title="这相当于一个CheckBox"/>
        <CheckBoxPreference
            android:key="prefCheckBoxTwo"
            android:title="还可以设置summary"
            android:summaryOn="选中了"
            android:summaryOff="没选中"/>
        <EditTextPreference
            android:key="prefEditText"
            android:title="这相当于一个EditText"
            android:summary="我是EditText的一个summary"/>
        <ListPreference
            android:key="prefList"
            android:title="这相当于一个List表"/>
    </PreferenceCategory>

   <PreferenceCategory
        android:key="prefCategoryTwo"
        android:title="Inactive" >
        <MultiSelectListPreference
            android:key="prefMultiSelect"
            android:title="这相当于一个MultiSelect"/>
        <SwitchPreference
            android:key="prefSwitch"
            android:title="这相当于一个Switch"
            android:switchTextOn="switchTextOn选中了"
            android:switchTextOff="switchTextOff没选中"
            android:summaryOn="summaryOn选中了"
            android:summaryOff="summaryOff没选中"
            android:shadowColor="#0df10d"/>
        <RingtonePreference
            android:key="prefRingtone"
            android:title="这相当于一个"
            android:summary="请选择铃声"
            android:icon="@mipmap/ic_launcher_round"/>
    </PreferenceCategory>
 </PreferenceScreen>

大概长这样子:
这里写图片描述

2. 然后再新建一个名为Settings的空(empty)activity,这里就不多说了,关键是新建以后

3. 在class文件里新建一个settingsfragment类继承PreferenceFragment类

SettingsByPrenference.class文件

public class SettingsByPrenference extends AppCompatActivity {

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

    public static class SettingsFragment extends PreferenceFragment{
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.settingsfragment);
        }
    }
}

addPreferencesFromResource(R.xml.settingsfragment)这行代码是添加preference的布局

关于如何快速引入重写方法,新手可能比较纠结,使用Ctrl+o快捷键可以快速添加,这个小技巧大大方便你的敲代码。

4. 然后我们转到刚才新建的activity的布局文件,在布局文件里添加一个fragment,通过fragment来将preference的资源文件引进来。

activity_settings_by_prenference.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.a14392.csdn_example.SettingsByPrenference">
    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/settingsFragment"
    android:name="com.example.a14392.csdn_example.SettingsByPrenference$SettingsFragment"/>
</LinearLayout>

注意: fragment要有id,即使用不上id,也要对id进行设置,否则运行时会报布局加载错误。

5. 这样一个settings页面就做出来了,效果图如下:
这里写图片描述

先介绍到这里,如有错误欢迎指出,接受各位的批评!下次介绍Preference的相关控件的简单使用,告辞!

在Android中,`launcher_settings.xml`文件通常包含应用的设置项,如果想要隐藏某些设置项使其不在用户界面中显示,你可以采取以下几个步骤: 1. **标记为不可见**: 可能的情况下,可以在`<Preference>`元素中添加`android:key`属性,并将其值设为`false`或者`@string/hidden_preference_key`,这会让系统默认地将该设置视为不可见。例如: ```xml <Preference android:key="your_hidden_preference" android:title="@string/hidden_title" android:summary="@string/hidden_summary" android:disableDependentsState="true" /> <!-- 这行可以隐藏依赖的选项 --> ``` 2. **利用条件判断**: 如果你希望仅在特定条件下隐藏设置,可以创建一个`PreferenceScreen`并动态添加或移除`Preference`元素。例如,在代码中检查权限或状态,然后控制其可见性。 3. **使用FragmentManager**: 如果设置是在单独的Fragment中,你可以禁用或隐藏Fragment,使得在启动时不会显示在主屏幕的列表里。在`onCreateView()`中设置`isVisibleToUser = false`。 4. **在配置文件处理**: 如果你想在整个应用范围内隐藏设置,可以在`strings.xml`或`values-night.xml`等资源文件中设置对应的字符串ID为`null`,然后在设置代码中检查是否可用。 请注意,完全删除设置可能违反Google Play Store的规定,因为它影响了应用的功能完整性。只隐藏那些非核心功能的设置通常是更合适的做法。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值