1、Android Settings 大部分功能是用Preference+Fragment實現的,其架構佈局不同於普通的Android應用開發,如何在Settings XML代碼中跳轉到某個activity呢?
方案:
<PreferenceScreen
android:key="ethernet_static_ip_settings"
android:title="@string/category_ethernet" >
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.android.settings" android:targetClass="com.android.settings.ethernet.EthernetStaticIP" />
</PreferenceScreen>
2、Settings 編輯框使用的是EditTextPreference,此類不同於EditText控件,不能直接對文本內容添加約束,比如限制內容爲數字,控制內容最大長度等等,如何對EditTextPreference內容約束呢?
方案舉例:設置EditTextPreference輸入內容爲數字或者”.”,文本內容最長爲20
EditTextPreference preference = (EditTextPreference) findPreference(ip_address);
//設置輸入法顯示風格
preference.getEditText().setInputType(EditorInfo.TYPE_CLASS_NUMBER);
//編輯框內容監聽,輸入內容只能爲“0123456789.”
DigitsKeyListener mDigitsKeyListener = DigitsKeyListener.getInstance("0123456789.");
preference.getEditText().setKeyListener(mDigitsKeyListener);
//添加過濾器,設置文本內容最大長度爲20
preference.getEditText().setFilters(new InputFilter[]{
new InputFilter.LengthFilter(20)});
PS:EditTextPreference類中有方法getEditText(),此方法返回EditText,通過過濾器InputFilter的使用,即可實現對編輯框內容的約束
源碼如下:
/**
* Returns the {@link EditText} widget that will be shown in the dialog.
* @return The {@link EditText} widget that will be shown in the dialog.
*/
public EditText getEditText() {
return mEditText;
}