Android PreferenceActivity新增Button、Textview控制元件
阿新 • • 發佈:2018-12-04
因為PreferenceActivity載入的layout是以PreferenceScreen為底的,所以沒辦法在layout裡面直接新增TextView之類的控制元件。
此時可以把PreferenceScreen當做一個listview,放在另一個layout中:
1. PreferenceScreen的layout,可以在其中新增一些類似CheckboxPreference
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="Change available services"> </PreferenceScreen>
2. 新加的layout,listview的ID用android內建的
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/service_status_textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dp" /> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
3. PreferenceActivity中使用兩個layout:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.preference_screen_layout); setContentView(R.layout.add_textview_layout); pScreen = getPreferenceScreen(); mTextView = (TextView) findViewById(R.id.service_status_textView); mContext = this.getApplicationContext(); }
pScreen可以在後面來管理activity中的preference,mTextView可以用來更新text。
4. 另外,動態新增的CheckboxPreference需要update才能設定checked/unchecked。
private void addCheckboxPreference() { CheckBoxPreference checkPreference = new CheckBoxPreference(mContext); otherServicePreference.setTitle(title); otherServicePreference.setIcon(icon); otherServicePreference.setKey(mKey); otherServicePreference.setPersistent(true); otherServicePreference.setDefaultValue(false); pScreen.addPreference(checkPreference); updatePreferenceStatus(); }
private void updatePreferenceStatus() { PreferenceScreen screen = getPreferenceScreen(); final int preferenceCount = screen.getPreferenceCount(); Log.i(TAG,"preferenceCount = "+preferenceCount); for (int i = 0; i < preferenceCount; i++) { Preference preference = screen.getPreference(i); mServicePreference = (CheckBoxPreference) findPreference(preference.getKey()); mServicePreference.setChecked(true); } }