反思一下思考过程。
背景
现在有时间,重新整理一下实现Setting页面的一些资料。
问题
- 有快速实现Android App 的Setting页的方法吗?
- Native的Preference、Support Library的Preference用哪个?
- 解决方案。
Android new project中的Setting模板
Android Studio中新建Activity中就有一个Setting模板。
SettingsActivity extends AppCompatPreferenceActivity 同时使用PreferenceFragment作为跳转的设置页面。
AppCompatPreferenceActivity(有 private AppCompatDelegate mDelegate;) extends PreferenceActivity 是PreferenceActivity使用AppCompatDelegate的兼容增强版。
Google Setting的库--Preference
Preference的使用不难,简单来说就是用PreferenceFragment作为设置的主页面,在其中用addPreferencesFromResource
方法加载一个xml文件,使用xml文件描述设置页面内有什么具体的设置项。一个个的设置项都是基于Preference类的,Preference类要提供在设置页面的View,并用SharedPreferences
存储设置。
但这个文档并没有提到v7 v14 Support Library中提供的Preference。
Support Library
稍微浏览了下源码,v7已有SwitchPreferenceCompat/PreferenceFragmentCompat,v14有SwitchPreference/PreferenceFragment,前者使用Compat类,后者没有,如分别使用android.support.v7.widget.SwitchCompat和android.widget.Switch,其他的代码逻辑几乎没有差别,见下面的compare图。
image-20180923213223317混乱,用哪个好?
主要的矛盾就是通常建议使用support library来获得最大的兼容性,但是v7.preference
却存在着很多问题。
Unfortunately,
support.v7.preference
has had everything related to dealing withFragment
stripped out, making it loose a lot of it's built-in functionality.
Instead of just maintaining an XML, you now have to sub-class and override a lot of stuff, all of which is unfortunately undocumented.
看到上面真是觉得感同身受。
接近我想要的东西
资料索引
v7v14Preference最基本用法。
很全面的一系列教程。
set preferenceTheme
in our theme in values/styles.xml
, this is required. We can use the default @style/PreferenceThemeOverlay
as value for a start
android:id="@android:id/widget_frame, and then declare TextView as android:title and android:summary
附加问题
xml文件中的View的那些属性值从哪里可以查?
未知🙈
- 首先我们要明白一点,xmlns是xml namespace的缩写,意思是xml命名空间。
- 有了他,Android Studio就会在我们编写布局文件的时候给出提示,提示我们可以输入什么,不可以输入什么。也可以理解为语法文件,或者语法判断器。
- 在项目需求中,我们往往使用系统自带的属性以及控件是不够的,我们可能需要导入自定义控件的一些属性,或者support支持包之类的。
- 现在的普遍做法是使用xmlns:app="",因为res-auto可以引用所有的自定义包名。
tools可以告诉Android Studio,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。