android settings学习笔记(二)-细节分析


1、Settings类
设置页面的Activity:
public class Settings extends PreferenceActivity implements ButtonBarHandler{}
因为从3.0中就引入了Fragment机制,所以在Settings里面就只有这一个Acitivity类,而进入表中的某项设置后,不是进入到新的Activity,而是在原来的Activity上切换了一个UI界面而已。


2、Settings Fragment
Android 4.0上Settings使用了Framgment机制。Fragment是我们在单个Activity上要切换多个UI界面,显示不同内容,对不同的界面不再使用不同的Activity。


3、Settings主界面的实现方法
为了能适应平板和手机,Settings采用了PreferenceActivity和PreferenceFragment结合的实现方式。
Settings类继承自PreferenceActivity,是Settings的主界面,它通过loadHeadersFromResource函数加载res/xml/settings_headers.xml来构造界面。在settings_headers.xml中声明了要在Settings主界面显示的各个header(如Sound、Display等)。


4、我们使用hierarchyviewer时Settings中的很多界面显示的都是SubSettings
要解决这个问题我们先要清楚为什么会写一个SubSettings.java继承自Settings.java?
SubSettings.java中的注释很清楚的告诉了我们原因:Stub class for showing sub-settings; we can't use the main Settings class since for our app it is a special singleTask class。原来是因为Settings.java在声明时指定了android:launchMode="singleTask"。


5、hierarchyviewer中显示SubSetting时如何确定我进入的是哪个fragment?
在res/xml/settings_headers.xml中声明了各个header被点击后使用的fragment。我们可以根据这个文件确定我们进入的fragment。
例如,当我们点击Display时hierarchyviewer中显示SubSetting。我们通过查找settings_headers就可知道使用的是哪个fragment。
Display这个header在settings_headers.xml中的声明:
<!-- Display -->
<header
android:id="@+id/display_settings"
android:icon="@drawable/ic_settings_display"
android:fragment="com.android.settings.DisplaySettings"
android:title="@string/display_settings" />
header中使用android:fragment指明使用的fragment。由此可知,Display使用的是com.android.settings.DisplaySettings这个fragment。


6、点击设置界面的某一个header时,设置界面是如何切换的?
点击设置界面的header时,会触发Settings中onHeaderClick函数,主要的处理都在其父类PreferenceActivity的onHeaderClick中实现的。如果这个header指定了fragment,在mSinglePane为true时,会调用startWithFragment方法,在startWithFragment方法中将调用onBuildStartFragmentIntent方法来构造intent对象(重要),最后使用该intent对象启动一个activity来显示fragment。


更多相关文章

  1. Android(安卓)Material Design控件之FloatingActionButton
  2. 在代码中设置RelativeLayout布局中标签的android:layout_toLeftO
  3. 软键盘挤压UI界面问题
  4. Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPag
  5. 【Android界面实现】Starting an Activity(Activity生命周期金字
  6. Android设置Dialog透明度、黑暗度方法
  7. Android设置透明效果的三种方法
  8. 代码设置RadioButton的高端技巧 - wavky
  9. Android(安卓)平板 控制软键盘只弹出一半,自动盯着界面中EditText

随机推荐

  1. 自定义滚动条插件
  2. 如何为每个JQuery UI滑块句柄使用不同的
  3. 无法通过jquery Ajax在laravel 5中发布
  4. jQuery遍历Table tr td td中包含标签
  5. 使用jquery的$ .ajax来获取node.js脚本的
  6. jQuery捕获被点击元素的ID
  7. 日期排序问题
  8. jQuery的getJSON不支持REST端
  9. 十、jquery-ui datepicker实现选择一周的
  10. jquery手指触摸滑动放大图片的方法(比较