我正在扩展PreferenceActivity我的设置屏幕。在这个偏好活动中,我有几个偏好,其中一个是定制的。问题如下:
在此自定义首选项(从 扩展ListPreference)中,我希望能够设置默认值,因此我覆盖了该setDefaultValue()方法。在这种方法中,我进行了一些解析,因此它将采用正确的值。当我试图用getValue()函数读取这个值时,它只返回null.
所以我想,当我把一些硬编码的值放在那里时会发生什么(你知道,也许我做错了什么,这不是第一次)。嗯,我还是null回来了。
任何想法我做错了什么?
编辑:
在 xml 文件中设置 defaultValue 并不是一个真正的选项,因为在我检索它们之前这些值是未知的。
我做了一个解决方法:
这样我在收集数据时设置了默认首选项
android preference preferenceactivity android-preferences listpreference
我正在为旧版本的Android开发并使用PreferenceActivity(我知道这PreferenceFragment是正确的方法).
我PreferenceActivity正在采用我的应用程序的主题,但我希望它采取一般设置主题是什么.我该怎么做呢?
我正在寻找类似于系统 android 的设置 UI 的东西。我想在应用程序启动时使用一些复选框首选项、开关首选项、edittextpreferences 之类的东西,然后当用户选择一个首选项时打开一个片段,但我无法弄清楚。
我已经提到了设置指南,但它坚持使用首选项标题。在显示标题时,我面临着显示文本的不太可能的开销,而这些文本又会加载片段。
例如,
我的首选项标题类似于:
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- These settings headers are only used on tablets. -->
    <header
        android:fragment="${packageName}.${activityClass}$GeneralPreferenceFragment"
        android:title="@string/pref_header_general" />
    <header
        android:fragment="${packageName}.${activityClass}$NotificationPreferenceFragment"
        android:title="@string/pref_header_notifications" />
    <header
        android:fragment="${packageName}.${activityClass}$DataSyncPreferenceFragment"
        android:title="@string/pref_header_data_sync" />
</preference-headers>
只是为了加载实际数据,我不得不使用它。实际数据将有复选框和编辑文本。
如果有人对此提供一些见解,那就太好了。如果我可以在加载屏幕时启动实际的片段数据,那将会有很大帮助。如果我可以控制在选择片段项目时调用哪个片段并调用其他片段,那就更好了。
android android-preferences android-fragments android-fragmentactivity
我在Holo.Light主题中创建了一个Android应用程序.除Ringtonepreference外,所有偏好都很轻松!
我甚至尝试在Preferences.xml中设置BGColor和textColor:
<RingtonePreference
        android:icon="@drawable/ic_menu_note"
        android:key="ringtone"
        android:persistent="true"
        android:summary="@string/settings_ringtone2"            
        android:background="#000000"
        android:textColor="#ffffff"
        android:title="@string/settings_ringtone" />
Android忽略了一切......
有没有人知道如何将RingtonePreference的主题改为Holo.Light?
PreferenceManager.getDefaultSharedPreferences(context)
和
getPreferences()
似乎检索不同的首选项.
PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                        "userWasAskedToEnableGps", false);
对我来说,返回false,
getPreferences(MODE_PRIVATE).getBoolean("userWasAskedToEnableGps", false);
返回true.
Preference是用编辑器编写的
Editor e = getPreferences(MODE_PRIVATE).edit(); 
e.putBoolean (...);
e.commit();
如何在Context中的Activity之外获得相同的Preferences?
我的应用程序中有首选项活动,它具有 ListPreference,因此用户可以为应用程序选择语言。
在用户关闭 Preferences 活动后,应用程序会立即显示新语言。
我想为 ListPreference 创建一个侦听器,以便在触发侦听器时应用程序将重新启动(就在用户从 ListPreference 中选择语言/选择项目之后)。
我怎样才能做到这一点?
设置活动:
public class SettingsActivity extends AppCompatPreferenceActivity {
/**
 * A preference value change listener that updates the preference's summary
 * to reflect its new value.
 */
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object value) {
        String stringValue = value.toString();
        if (preference instanceof ListPreference) {
            // For list preferences, look up the correct display value in
            // the preference's 'entries' list.
            ListPreference listPreference …java android preferenceactivity android-preferences listpreference
在我的 Android 应用程序中,我有一个PreferenceFragment从 XML 资源文件构建的。加载 XML 后,我想为PreferenceFragment 中的每个调用一个方法。我的问题是我还没有找到一种方法可以为我提供当前的所有首选项PreferenceFragment.
我知道我可以通过该findPreference(...)方法找到一个首选项,但我想获得所有首选项的迭代器。错过了方法还是我们无法获得所有首选项?
我正在尝试在我的顶部添加一些空间,该空间SwitchPreferenceCompat位于PreferenceFragmentCompat. 基本上我只需要在它和顶部之间留出一些空间Toolbar,无论是通过扩大它的高度还是使用填充间隙,而不添加会干扰Toolbar. 我相信我可以通过向 中添加自定义样式来实现这一点SwitchPreferenceCompat,但是我无法使其正常工作。
这是我尝试过的:
在我的styles.xml——
<style name="SwitchPreferenceNew" parent="Preference.SwitchPreferenceCompat.Material">
    <item name="android:paddingTop">20dp</item>
</style>
在我的app_preferences.xml——
<android.support.v7.preference.SwitchPreferenceCompat
    style="@style/SwitchPreferenceNew"
    android:defaultValue="false"
    android:icon="@drawable/ic_power_settings_new_black_48dp"
    android:key="prefsActivate"
    android:summary=""
    android:title="Activate reminders" />
我想我只是没有正确覆盖样式,但是我无法找到如何使用SwitchPreferenceCompat. 先感谢您!
我很难尝试设置 ListPreference 的样式。
我应用了一个主主题,它声明了一个首选项主题,它们都链接到一个对话框主题(分别是 alertDialogTheme)。它的工作原理是项目的文本颜色不会改变 - 但所有其他文本的颜色会改变。我不能依赖解决方法,因为我使用的是 v7 首选项,因此无法覆盖自定义类中的对话框方法。
对我来说,行看起来像是忽略了文本颜色值,但也许其他人对此有解决方案。否则这可能是一个错误?
主要款式:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- [...] -->        
    <!-- Some color values -->
    <item name="android:dialogTheme">@style/DialogTheme</item>
    <item name="android:alertDialogTheme">@style/DialogTheme</item>
    <item name="dialogTheme">@style/DialogTheme</item>
    <item name="alertDialogTheme">@style/DialogTheme</item>
    <item name="preferenceTheme">@style/PreferenceTheme</item>
</style>
偏好主题:
<style name="PreferenceTheme" parent="PreferenceThemeOverlay.v14.Material">
    <!-- [...] -->
    <!-- Some color values -->
    <item name="android:textColor">@color/preference_primary_color</item>
    <item name="android:textColorPrimary">@color/preference_primary_color</item>
    <item name="android:textColorSecondary">@color/preference_primary_color</item>
    <item name="android:textColorHighlight">@color/preference_primary_color</item>
    <item name="android:editTextColor">@color/preference_primary_color</item>
    <item name="android:dialogTheme">@style/DialogTheme</item>
    <item name="android:alertDialogTheme">@style/DialogTheme</item>
    <item name="preferenceTheme">@style/PreferenceTheme</item>
</style>
对话主题:
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColor">#EEEEEE</item>
    <item name="android:textColorPrimary">#EEEEEE</item>
    <item name="android:textColorSecondary">#EEEEEE</item>
    <item name="android:textColorHighlight">#EEEEEE</item>
    <item name="android:textColorTertiary">#EEEEEE</item>
    <item name="android:textColorAlertDialogListItem">#EEEEEE</item>
    <item name="android:editTextColor">#EEEEEE</item> …如何从应用程序内的设置选项以编程方式关闭通知?
在 Preference 更改侦听器的 if 语句中创建 Notification 通道的方法似乎正在完成这项工作。我担心我现在正在创建多个通知渠道。
首选项.xml
<PreferenceCategory
    app:key="notification_category"
    app:title="Notification"
    <SwitchPreferenceCompat
         app:key="notification_state"
         app:title="Enable notification message"/>
</PrefenceCategory>
主Activity.class
boolean mNotificationState;
Notification mNotification;
SharedPreferences.OnSharedPreferenceChangeListener listener;
@Override
protected void onCreate(Bundle saveInstanceState) {
    ...
    // Create notification object.
    mNotification = Notification(this);
    // Prefernce Listener
    listner = (sharedPrefences, s) -> {
        mNotificationState = SharedPreferences.getBoolean("notification_state", true);
    if(mNotificationState) {
        // concerned that a memory leak migh occur.
        notification.createNotificationChannel();
    } else {
        notification.getNotificationManager().cancelAll();
    }
}
/**
 * registerOnSharedPreferenceChangeListener
 */
@Override
public void onResume() {   
    super.onResume();
PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()).registerOnSharedPreferenceChangeListener(listener); …