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

来源:互联网 发布:屏幕监控软件 编辑:程序博客网 时间:2024/05/17 06:00

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。


0 0
原创粉丝点击