Articles of android preferences

代码中的SwitchPreference和CheckBoxPreference

我现在正在为我的应用程序创build一个首选项页面 在API-14之后,switchpreference可用。 我想用它来取代API14 +设备上的checkbox首选项 很容易使用res/xml和res/xml-14来获取正确的xml资源 但是,在编码部分,根据API切换偏好并不方便。 public class SettingActivity extends PreferenceActivity { private CheckBoxPreference enable; private SwitchPreference enablev14; @Override protected void onCreate(Bundle savedInstanceState) { addPreferencesFromResource(R.xml.setting); if (Build.VERSION.SDK_INT < 14) enable = (CheckBoxPreference) findPreference(key_enable); else enablev14 = (SwitchPreference) findPreference(key_enable); } … } 现在我的方法是使用if-clause来检查Build.VERSION并获取相应的对象来处理它。 但是代码的pipe理是非常不方便和困难的。 有没有人有更聪明的方法来做到这一点?

PreferenceFragment.findPreference始终返回NULL

我目前正在设置一个设置菜单,显示一个MultiSelectListPreference ,从联系人列表中select多个联系人。 在这一刻,我收到一个NullPointerExceptionexception,当我尝试MultiSelectListPreference#setEntryValue(CharSequence[])如果我先把setEntries ,那一个抛出相同的exception。 我已经放了一个断点,一步一步地看到会发生什么。 variables被填充,因为它们存储Strings ,它们可以包含一个String “null”,所以我猜如果没有Display_Name可用,那么它不会失败。 我基于这个答案的例子findPreference 任何人有一个想法? 如果你需要更多的信息,告诉我。 谢谢阅读! package be.wdk.sendtowork;contactNumberArray import android.database.Cursor; import android.os.Bundle; import android.preference.MultiSelectListPreference; import android.preference.PreferenceFragment; import android.provider.ContactsContract; import android.util.Log; import android.widget.Toast; public class PreferenceClass extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Integer countContacts = 0; String[] projection = new String[]{ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.PHOTO_URI }; String […]

CheckBoxPreference与自己的布局

我有一些PreferenceCheckBoxes的PreferenceScreen。 我想更改标题和摘要的textColor和textSize,checkbox的图像选中和取消选中。 所以我使用android:layout来改变这个属性。 我的ChceckBoxPreference: <CheckBoxPreference android:layout="@layout/preference_checkbox" android:key="temp" android:title="@string/title" android:summary="@string/summary" android:defaultValue="true" /> 当我使用android:widgetLayout它看起来很奇怪。 这是我的preference_checkbox.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_marginLeft="10dp" > <TextView android:id="@+android:id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/gray" android:textSize="20sp" /> <TextView android:id="@+android:id/summary" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/gray" android:textSize="14sp" /> </LinearLayout> <CheckBox android:id="@+android:id/checkbox" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true" android:layout_marginRight="10dp" /> </RelativeLayout> ID为@+android:id/title和@+android:id/summary @+android:id/title显示正确的值。 然而,尽pipe默认值和ID @+android:id/checkbox不能正常工作。 […]

Android:如何在input时从TimePicker获取时间

我有一个DialogPreference实现了一个简单的TimePicker.OnTimeChangedListener(见下文)。 通过单击+/-button设置时间​​很好。 但我不知道如何保存时间select器的状态,当用户input时间直接进入文本框。 访问当前的textfield值可能就足够了,所以我可以将它保存在onDialogClosed中。 但timePicker.getCurrentHour()不会这样做。 请帮忙… public class TimePreference extends DialogPreference implements TimePicker.OnTimeChangedListener { // … @Override public void onTimeChanged(TimePicker view, int hours, int minutes) { selectedHours = hours; selectedMinutes = minutes; } @Override public void onDialogClosed(boolean positiveResult) { if(positiveResult) { String timeString = selectedHours + ":" + selectedMinutes; if(isPersistent()) { persistString(timeString); } } } […]

Android:有没有办法从代码显示DialogPreference?

我想在第一次应用程序启动时打开一些首选项(通过扩展DialogPreference来完成)。 而且,这些偏好也可以照常使用。 有没有办法完成这个? 编辑: 我有我的自定义首选项,如下所示: public class CitySelectPreference extends DialogPreference { // Some code here } 而作为解决scheme,我希望它从代码显示,而不需要用户进入首选项屏幕。

如何在android中的偏好添加涟漪效应?

我正在努力添加涟漪效应,当偏好被触摸(select)。 我已经通过扩展ListPreference定制我的偏好。 我试图通过使用RippleDrawable编程设置涟漪效果,但我没有看到animation。 这是我的自定义喜好类 public class CustomListPreference extends ListPreference { public CustomListPreference(Context context, AttributeSet attrs) { super(context, attrs); } public CustomListPreference(Context context) { super(context); } @Override protected void onBindView(View view) { super.onBindView(view); setCustomStyle(view); } private void setCustomStyle(View view) { TextView titleView = (TextView) view.findViewById(android.R.id.title); titleView.setTypeface(InitActivity.TYPEFACE_REGULAR); TextView summary = (TextView) view.findViewById(android.R.id.summary); summary.setTypeface(InitActivity.TYPEFACE_REGULAR); //Setting the drawable here, […]

对于非stringtypes,默认的bindPreferenceSummaryToValue会崩溃

我正在按照示例方法添加一个兼容的首选项/片段对话框在这里find。 这样做的时候,我发现如果我有喜欢整数,布尔等,它只是崩溃。 private static void bindPreferenceSummaryToValue(Preference preference) { // Set the listener to watch for value changes. preference .setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); // Trigger the listener immediately with the preference's // current value. sBindPreferenceSummaryToValueListener.onPreferenceChange( preference, PreferenceManager.getDefaultSharedPreferences( preference.getContext()).getString(preference.getKey(),"")); } 我发现通过将getString()更改为getInteger() ,并使用不同的bindPreferenceSummaryToValue函数(取决于types是什么getInteger() ,可以使其成为Integer。 当然,这似乎是一个非常不雅的解决scheme,但我正在努力弄清楚我还能做些什么。 这是堆栈跟踪,BTW。 11-22 19:52:10.068: E/AndroidRuntime(17564): FATAL EXCEPTION: main 11-22 19:52:10.068: E/AndroidRuntime(17564): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kd7uiy.hamfinder/com.kd7uiy.hamfinder.MainSettingsActivity}: […]

什么是默认共享首选项使用的文件名?

Android备份服务需要文件名来备份共享首选项: public static final String PREFS = "PrefFile"; SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, PREFS); 如果文件名是在喜好创build期间给出的,那么清楚该使用什么 public static final String PREF_FILE_NAME = "PrefFile"; SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 但是我使用默认的共享首选项: SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 我应该如何将PREFS值传递给SharedPreferencesBackupHelper ?

Android更改偏好片段的背景颜色

我为我的应用程序设置了一个主题,其中包括一个蓝色的背景… 但是,这也使我的偏好片段蓝色。 我想保留原来的“android:Theme.Holo.Light.DarkActionBar”。 怎么做? 谢谢!

SharedPreferences的最佳实践

关于我正在寻找的SharedPreferences一组问题: 什么,为什么,什么时候? 它是如何工作的? 最佳实践使用它? 这里只回答了其中一些问题。 这就是为什么我做了一些调查和testing。 正如我在我自己的问题上回答我已经决定与其他人分享答案。