学会Settings必看

由于需要修改下设置里面的某个东西,花了两天看了下这个应用,下面是当时看 的一些资料记录下。

Android Fragments
http://www.cnblogs.com/TerryBlog/archive/2012/02/17/2355753.html


菜鸟Android4.0 Settings分析(一)
http://blog.csdn.net/wu_shu_jun/article/details/8514465
http://blog.csdn.net/eyu8874521/article/details/8250611

listView和ListAdapter
http://www.cnblogs.com/LT-blogs/archive/2012/08/08/2627932.html

LayoutInflater
http://blog.sina.com.cn/s/blog_629b701e0100rg4d.html
http://wenku.baidu.com/view/1c1a40bcf121dd36a32d8247.html
http://android.tgbus.com/Android/tutorial/201104/348009.shtml
http://blog.163.com/android_2012/blog/static/20951418720126195847197/

Android Switch控件介绍
http://blog.csdn.net/welovesunflower/article/details/7990670


onSaveInstanceState
Android中Preference的使用以及监听事件分析
http://blog.csdn.net/qinjuning/article/details/6710003
http://blog.csdn.net/ixiaobu/article/details/8609935

PreferenceFragment
以列表的形式分层显示 Preference,在用户交互改变这些 Preference 的时候, Preference 将会自动的保存到SharedPreferences;而如果我们要获取 在一个fragment里面将要使用的某个preference层的一个SharedPreferences的实例,我们可以使用 getDefaultSharedPreferences(android.content.Context)方法,参数是和这个fragment相同的一个上下文

还有一个比较重要的就是android的文档,里面讲的比上面的都详细,不过是英文的
android 3.0之前的版本一般使用   PreferenceScreen  来组织(android文档)
<span class="tag" style="color: rgb(0, 0, 136);"><PreferenceScreen</span><span class="pln" style="color: rgb(0, 0, 0);">  </span><span class="atn" style="color: rgb(136, 34, 136);">xmlns:android</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"http://schemas.android.com/apk/res/android"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="com" style="color: rgb(136, 0, 0);"><!-- opens a subscreen of settings --></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><PreferenceScreen</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:key</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"button_voicemail_category_key"</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:title</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@string/voicemail"</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:persistent</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"false"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="tag" style="color: rgb(0, 0, 136);"><ListPreference</span><span class="pln" style="color: rgb(0, 0, 0);">
            </span><span class="atn" style="color: rgb(136, 34, 136);">android:key</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"button_voicemail_provider_key"</span><span class="pln" style="color: rgb(0, 0, 0);">
            </span><span class="atn" style="color: rgb(136, 34, 136);">android:title</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@string/voicemail_provider"</span><span class="pln" style="color: rgb(0, 0, 0);"> ... </span><span class="tag" style="color: rgb(0, 0, 136);">/></span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="com" style="color: rgb(136, 0, 0);"><!-- opens another nested subscreen --></span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="tag" style="color: rgb(0, 0, 136);"><PreferenceScreen</span><span class="pln" style="color: rgb(0, 0, 0);">
            </span><span class="atn" style="color: rgb(136, 34, 136);">android:key</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"button_voicemail_setting_key"</span><span class="pln" style="color: rgb(0, 0, 0);">
            </span><span class="atn" style="color: rgb(136, 34, 136);">android:title</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@string/voicemail_settings"</span><span class="pln" style="color: rgb(0, 0, 0);">
            </span><span class="atn" style="color: rgb(136, 34, 136);">android:persistent</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"false"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">
            ...
        </span><span class="tag" style="color: rgb(0, 0, 136);"></PreferenceScreen></span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="tag" style="color: rgb(0, 0, 136);"><RingtonePreference</span><span class="pln" style="color: rgb(0, 0, 0);">
            </span><span class="atn" style="color: rgb(136, 34, 136);">android:key</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"button_voicemail_ringtone_key"</span><span class="pln" style="color: rgb(0, 0, 0);">
            </span><span class="atn" style="color: rgb(136, 34, 136);">android:title</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@string/voicemail_ringtone_title"</span><span class="pln" style="color: rgb(0, 0, 0);">
            </span><span class="atn" style="color: rgb(136, 34, 136);">android:ringtoneType</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"notification"</span><span class="pln" style="color: rgb(0, 0, 0);"> ... </span><span class="tag" style="color: rgb(0, 0, 136);">/></span><span class="pln" style="color: rgb(0, 0, 0);">
        ...
    </span><span class="tag" style="color: rgb(0, 0, 136);"></PreferenceScreen></span><span class="pln" style="color: rgb(0, 0, 0);">
    ...
</span><span class="tag" style="color: rgb(0, 0, 136);"></PreferenceScreen></span>
像Preference 可以在自己实现如
[java]  view plain copy print ?
  1. public class IconPreferenceScreen extends Preference {  
  2.   
  3.     private Drawable mIcon;  
  4.   
  5.     public IconPreferenceScreen(Context context, AttributeSet attrs) {  
  6.         this(context, attrs, 0);  
  7.     }  
  8.   
  9.     public IconPreferenceScreen(Context context, AttributeSet attrs, int defStyle) {  
  10.         super(context, attrs, defStyle);  
  11.         setLayoutResource(R.layout.preference_icon);  
  12.         TypedArray a = context.obtainStyledAttributes(attrs,  
  13.                 R.styleable.IconPreferenceScreen, defStyle, 0);  
  14.         mIcon = a.getDrawable(R.styleable.IconPreferenceScreen_icon);  
  15.     }  
  16.   
  17.     @Override  
  18.     public void onBindView(View view) {  
  19.         super.onBindView(view);  
  20.         ImageView imageView = (ImageView) view.findViewById(R.id.icon);  
  21.         if (imageView != null && mIcon != null) {  
  22.             imageView.setImageDrawable(mIcon);  
  23.         }  
  24.     }  
  25. }  

然后xml文件这么写
[html]  view plain copy print ?
  1. <PreferenceScreen  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"  
  4.     android:title="@string/settings_label"  
  5.     android:layout="@layout/main"  
  6.     android:key="parent">  
  7.            <com.android.settings.IconPreferenceScreen  
  8.              settings:icon="@drawable/ic_settings_date_time"  
  9.              android:title="@string/date_and_time_settings_title"  
  10.              android:summary="@string/date_and_time_settings_summary">  
  11.             <intent  
  12.                 android:action="android.intent.action.MAIN"  
  13.                 android:targetPackage="com.android.settings"  
  14.                 android:targetClass="com.android.settings.datetime.DateTimeSettings" />  
  15.         </com.android.settings.IconPreferenceScreen>  

2、如果是3.0之后的版本,我们可以使用Fragments和Headers属性, Fragments是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有 更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity 管理的back stack 中保存些变化

Fragments 设计理念

      在设计应用时特别是Android 应用 ,有众多的分辨率要去适应,而fragments 可以让你在屏幕不同的屏幕上动态管理UI。例如:通讯应用程序(QQ),用户列表可以在左边,消息窗口在右边的设计。而在手机屏幕用户列表填充屏幕当点击 某一用户时,则弹出对话窗口的设计,如下图:


为了使用Headers,我们需要:
a、把各个组定义为一个 PreferenceFragment,每个组需要其相应的xml
b、创建xml Headers文件,显示各个组,并且定义各个组相应的设置显示。
c、把你的settign应用继承自PreferenceAcitvity
d、实现onBulidHeaders回调来添加headers文件。

a、
<span class="kwd" style="color: rgb(0, 0, 136);">public</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">static</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">class</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">SettingsFragment</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">extends</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">PreferenceFragment</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="lit" style="color: rgb(0, 102, 102);">@Override</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 136);">public</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> onCreate</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">Bundle</span><span class="pln" style="color: rgb(0, 0, 0);"> savedInstanceState</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="kwd" style="color: rgb(0, 0, 136);">super</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">onCreate</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">savedInstanceState</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">

        </span><span class="com" style="color: rgb(136, 0, 0);">// Load the preferences from an XML resource</span><span class="pln" style="color: rgb(0, 0, 0);">
        addPreferencesFromResource</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">R</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">xml</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">preferences</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="pun" style="color: rgb(102, 102, 0);">...</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span>
相应的xml
[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >  
  3. <CheckBoxPreference  
  4.             android:key="hdmi"  
  5.             android:title="@string/hdmi_title"  
  6.             android:defaultValue="true"/>  
  7.   
  8.         <ListPreference  
  9.            android:key="hdmi_lcd_timeout"   
  10.            android:title="@string/hdmi_lcd_timeout"  
  11.            android:entries="@array/hdmi_lcd_timeout_entries"  
  12.            android:entryValues="@array/hdmi_lcd_timeout_values"  
  13.         />      
  14.   
  15. </PreferenceScreen>  
b、
创建headers文件
<span class="pun" style="color: rgb(102, 102, 0);"><?</span><span class="pln" style="color: rgb(0, 0, 0);">xml version</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="str" style="color: rgb(0, 136, 0);">"1.0"</span><span class="pln" style="color: rgb(0, 0, 0);"> encoding</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="str" style="color: rgb(0, 136, 0);">"utf-8"</span><span class="pun" style="color: rgb(102, 102, 0);">?></span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="tag" style="color: rgb(0, 0, 136);"><preference-headers</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(136, 34, 136);">xmlns:android</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"http://schemas.android.com/apk/res/android"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><header</span><span class="pln" style="color: rgb(0, 0, 0);"> 
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:fragment</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"com.example.prefs.SettingsActivity$SettingsFragmentOne"</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:title</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@string/prefs_category_one"</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:summary</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@string/prefs_summ_category_one"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="tag" style="color: rgb(0, 0, 136);">/></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><header</span><span class="pln" style="color: rgb(0, 0, 0);"> 
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:fragment</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"com.example.prefs.SettingsActivity$SettingsFragmentTwo"</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:title</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@string/prefs_category_two"</span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="atn" style="color: rgb(136, 34, 136);">android:summary</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@string/prefs_summ_category_two"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="com" style="color: rgb(136, 0, 0);"><!-- key/value pairs can be included as arguments for the fragment. --></span><span class="pln" style="color: rgb(0, 0, 0);">
        </span><span class="tag" style="color: rgb(0, 0, 136);"><extra</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(136, 34, 136);">android:name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"someKey"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(136, 34, 136);">android:value</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"someHeaderValue"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="tag" style="color: rgb(0, 0, 136);">/></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"></header></span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="tag" style="color: rgb(0, 0, 136);"></preference-headers></span>

c和d
<span class="kwd" style="color: rgb(0, 0, 136);">public</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">class</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">SettingsActivity</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">extends</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">PreferenceActivity</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="lit" style="color: rgb(0, 102, 102);">@Override</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="kwd" style="color: rgb(0, 0, 136);">public</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">void</span><span class="pln" style="color: rgb(0, 0, 0);"> onBuildHeaders</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">List</span><span class="pun" style="color: rgb(102, 102, 0);"><</span><span class="typ" style="color: rgb(102, 0, 102);">Header</span><span class="pun" style="color: rgb(102, 102, 0);">></span><span class="pln" style="color: rgb(0, 0, 0);"> target</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">{</span><span class="pln" style="color: rgb(0, 0, 0);">
        loadHeadersFromResource</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">R</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">xml</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">preference_headers</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> target</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="pun" style="color: rgb(102, 102, 0);">}</span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="pun" style="color: rgb(102, 102, 0);">}</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值