标签: android-preferences

在自定义 Preference 类上调用 setDefaultValue() 不会设置默认值。为什么?

我正在扩展PreferenceActivity我的设置屏幕。在这个偏好活动中,我有几个偏好,其中一个是定制的。问题如下:

在此自定义首选项(从 扩展ListPreference)中,我希望能够设置默认值,因此我覆盖了该setDefaultValue()方法。在这种方法中,我进行了一些解析,因此它将采用正确的值。当我试图用getValue()函数读取这个值时,它只返回null.

所以我想,当我把一些硬编码的值放在那里时会发生什么(你知道,也许我做错了什么,这不是第一次)。嗯,我还是null回来了。

任何想法我做错了什么?

编辑:
在 xml 文件中设置 defaultValue 并不是一个真正的选项,因为在我检索它们之前这些值是未知的。

我做了一个解决方法:

  • 应用程序第一次启动时:获取数据
  • 在首选项中设置值。

这样我在收集数据时设置了默认首选项

android preference preferenceactivity android-preferences listpreference

2
推荐指数
1
解决办法
6993
查看次数

android:PreferenceActivity主题

我正在为旧版本的Android开发并使用PreferenceActivity(我知道这PreferenceFragment是正确的方法).

PreferenceActivity正在采用我的应用程序的主题,但我希望它采取一般设置主题是什么.我该怎么做呢?

android android-preferences android-theme

2
推荐指数
1
解决办法
1602
查看次数

安卓设置界面

我正在寻找类似于系统 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>
Run Code Online (Sandbox Code Playgroud)

只是为了加载实际数据,我不得不使用它。实际数据将有复选框和编辑文本。

如果有人对此提供一些见解,那就太好了。如果我可以在加载屏幕时启动实际的片段数据,那将会有很大帮助。如果我可以控制在选择片段项目时调用哪个片段并调用其他片段,那就更好了。

android android-preferences android-fragments android-fragmentactivity

2
推荐指数
1
解决办法
2647
查看次数

RingtonePreference主题

我在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" />
Run Code Online (Sandbox Code Playgroud)

Android忽略了一切......

有没有人知道如何将RingtonePreference的主题改为Holo.Light?

android android-preferences android-theme

2
推荐指数
1
解决办法
1312
查看次数

PreferenceManager.getDefaultSharedPreferences()vs getPreferences()

PreferenceManager.getDefaultSharedPreferences(context)
Run Code Online (Sandbox Code Playgroud)

getPreferences()
Run Code Online (Sandbox Code Playgroud)

似乎检索不同的首选项.

PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                        "userWasAskedToEnableGps", false);
Run Code Online (Sandbox Code Playgroud)

对我来说,返回false,

getPreferences(MODE_PRIVATE).getBoolean("userWasAskedToEnableGps", false);
Run Code Online (Sandbox Code Playgroud)

返回true.

Preference是用编辑器编写的

Editor e = getPreferences(MODE_PRIVATE).edit(); 
e.putBoolean (...);
e.commit();
Run Code Online (Sandbox Code Playgroud)

如何在Context中的Activity之外获得相同的Preferences?

android android-preferences sharedpreferences

2
推荐指数
2
解决办法
2万
查看次数

如何在首选项活动中创建首选项更改的侦听器?

我的应用程序中有首选项活动,它具有 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 …
Run Code Online (Sandbox Code Playgroud)

java android preferenceactivity android-preferences listpreference

2
推荐指数
1
解决办法
8540
查看次数

从 PreferenceFragment 获取所有首选项

在我的 Android 应用程序中,我有一个PreferenceFragment从 XML 资源文件构建的。加载 XML 后,我想为PreferenceFragment 中的每个调用一个方法。我的问题是我还没有找到一种方法可以为我提供当前的所有首选项PreferenceFragment.

我知道我可以通过该findPreference(...)方法找到一个首选项,但我想获得所有首选项的迭代器。错过了方法还是我们无法获得所有首选项?

android android-preferences

2
推荐指数
1
解决办法
2164
查看次数

SwitchPreferenceCompat 的自定义样式属性(支持 v7)

在此处输入图片说明

我正在尝试在我的顶部添加一些空间,该空间SwitchPreferenceCompat位于PreferenceFragmentCompat. 基本上我只需要在它和顶部之间留出一些空间Toolbar,无论是通过扩大它的高度还是使用填充间隙,而不添加会干扰Toolbar. 我相信我可以通过向 中添加自定义样式来实现这一点SwitchPreferenceCompat,但是我无法使其正常工作。

这是我尝试过的:

在我的styles.xml——

<style name="SwitchPreferenceNew" parent="Preference.SwitchPreferenceCompat.Material">
    <item name="android:paddingTop">20dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在我的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" />
Run Code Online (Sandbox Code Playgroud)

我想我只是没有正确覆盖样式,但是我无法找到如何使用SwitchPreferenceCompat. 先感谢您!

android android-preferences preferencefragment

2
推荐指数
1
解决办法
1540
查看次数

列表首选项文本颜色

我很难尝试设置 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>
Run Code Online (Sandbox Code Playgroud)


偏好主题:

<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>
Run Code Online (Sandbox Code Playgroud)


对话主题:

<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> …
Run Code Online (Sandbox Code Playgroud)

android android-preferences

2
推荐指数
1
解决办法
1569
查看次数

如何从应用程序内部关闭应用程序通知

如何从应用程序内的设置选项以编程方式关闭通知?

在 Preference 更改侦听器的 if 语句中创建 Notification 通道的方法似乎正在完成这项工作。我担心我现在正在创建多个通知渠道。

首选项.xml

<PreferenceCategory
    app:key="notification_category"
    app:title="Notification"
    <SwitchPreferenceCompat
         app:key="notification_state"
         app:title="Enable notification message"/>
</PrefenceCategory>
Run Code Online (Sandbox Code Playgroud)

主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); …
Run Code Online (Sandbox Code Playgroud)

android android-preferences android-notifications

2
推荐指数
1
解决办法
3306
查看次数