用户选项和设置用户界面

举报
择城终老 发表于 2021/07/27 01:05:49 2021/07/27
【摘要】 许多应用程序都会提供一个单独的界面,允许用户更改应用程序的选项和设置。Android提供了一套现成的Activity和Fragment类,使得创建这类用户界面非常容易:preferenceActivity和preferenceFragment。 首先在XML资源目录下创建XML文件,并在开头使用PreferenceScreen语法。该XML的结构很简单,它指定了所有允许用户...

许多应用程序都会提供一个单独的界面,允许用户更改应用程序的选项和设置。Android提供了一套现成的Activity和Fragment类,使得创建这类用户界面非常容易:preferenceActivity和preferenceFragment。

首先在XML资源目录下创建XML文件,并在开头使用PreferenceScreen语法。该XML的结构很简单,它指定了所有允许用户更改的偏好,以及它们是如何相互作用的。开发者可以提供用于输入文本字符串的简单文本字段,复选框以及选项列表。对于每个选项,可以指定标题和说明,还可以把偏好分成不同的类别。开发者不需要自己去保存修改的值,因为PreferenceFragment会保存用户的修改。PreferenceFragment使用的SharedPreferences实例和从PreferenceManaget.getDefaultSharedPreferences()获取的是同一个。

下面的PreferenceScreen.xml代码显示了两个用户可配置的选项。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 <PreferenceCategory android:title="@string/network_preferences_title">
 <CheckBoxPreference
 android:title="@string/network_wifi_only_title"
 android:summaryOn="@string/network_wifi_only_summary_on"
 android:summaryOff="@string/network_wifi_only_summary_off"
 android:key="network.wifiOnly"
 android:defaultValue="false"/>
 <ListPreference
 android:title="@string/animal_retry_count_title"
 android:summary="@string/animal_retry_count_summary"
 android:key="network.retryCount"
 android:defaultValue="3"
 android:entryValues="@array/animal_retry_count_option_values"
 android:entries="@array/animal_retry_count_options" />
 </PreferenceCategory>
</PreferenceScreen>

接下来要实现PreferenceActivity,并且添加preferenceFragment作为其UI,然后调用PreferenceFragment.addPreferencesFromResource()来指定用于显示设置用户界面的XML。Android框架会生成符合应用程序样式的主题的用户界面。

下面的代码指定了要使用的XML资源文件。本例还调用了PreferenceManager.setDefaultValues方法,这样偏好文件会使用XML文件指定的默认值。

public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener{ @Override
 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
 PreferenceManager.setDefaultValues(getActivity(), R.xml.preference_screen, false);
 addPreferencesFromResource(R.xml.preference_screen);
 getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this);
 } @Override
 public void onDestroy() { super.onDestroy();
 getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this);
 } @Override
 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Log.i("MainActivity", "liyuanjinglyj");
 Log.i("MainActivity",key);
 boolean flag=false;
 if("network.wifiOnly".equals(key)){ flag=sharedPreferences.getBoolean(key,false);
 } if(flag){ Toast.makeText(getActivity(), "打开了WIFI", Toast.LENGTH_LONG).show();
 } }
}
上面代码不仅实现了上述功能而且实现了SharedPreferences.OnSharedPreferenceChangeListener接口,当偏好设置发生改变时,就可以根据改变的Key处理相应的事件,当然光实现这个接口是不能监听偏好设置的变化的,还要注册后方能监听。

getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this);

当然有注册就必须注销。

启动这类Activity最常用的方式是使用Intent,而且要指定ComponentName而不是使用action字符串。还要确保在清单文件中把android:exported标志设为false,使其只能在应用程序中启动该Activity。

                                                      

文章来源: liyuanjinglyj.blog.csdn.net,作者:李元静,版权归原作者所有,如需转载,请联系作者。

原文链接:liyuanjinglyj.blog.csdn.net/article/details/45936555

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。