Articles of android preferences

在Landroid / support / v7 / preference / R $ id类中没有typesI的静态字段list_container

我将一个2岁的项目迁移到Android Studio(以及新的lib),当我调用PreferenceScreen时遇到很多问题。 java.lang.NoSuchFieldError: No static field list_container of type I in class Landroid/support/v7/preference/R$id; or its superclasses (declaration of ‘android.support.v7.preference.R$id’ appears in /data/app/com.sh.inv-1/base.apk) at android.support.v7.preference.PreferenceFragmentCompat.onCreateView(PreferenceFragmentCompat.java:260) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1988) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:754) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1653) at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:364) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1234) 我的build.gradle是: apply plugin: ‘com.android.application’ android { useLibrary ‘org.apache.http.legacy’ compileSdkVersion 23 buildToolsVersion “23.0.3” defaultConfig { applicationId […]

如何在运行时获取铃声首选项?

我有以下xml: 我希望每次通知即将显示时,要查看铃声的值并相应地发出蜂鸣声:)…更确切地说,我的通知是在broadcastReceiver类中生成的,每次接收器捕获的内容都会创建一个新通知…我只是希望通知的铃声根据首选项中设置的铃声进行更改。 我怎样才能做到这一点? 谢谢 麦克风

Android – 带有首选项支持库的EditTextPreference中没有getEditText方法

我只需要改为使用PreferenceFragmentCompat来实现权限检查,这意味着使用EditTextPreference的支持版本。 不幸的是,似乎缺少getEditText。 有什么工作吗? 更新发现此问题已记录。 似乎它被故意删除了,但答案并没有解释如何实现我想要做的事情。 我使用的代码如下 final EditText editTextTL; editTextTL = ((EditTextPreference) findPreference(“my_preference”)).getEditText(); editTextTL.setFilters(new InputFilter[]{new NumericRangeFilter()}); editTextTL.setOnFocusChangeListener(new AmountOnFocusChangeListener()); 我的相关import import android.support.v7.preference.EditTextPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceFragmentCompat; 我的Gradle依赖项 compile ‘com.android.support:support-v4:23.0.1’ compile ‘com.android.support:appcompat-v7:23.0.1’ compile ‘com.android.support:preference-v14:23.0.1’ compile ‘com.android.support:recyclerview-v7:23.0.1’

SharedPreferences.getAll()没有false的首选项键。 如何检索所有密钥?

只有带有android:defaultValue =“true”的CheckboxPreference键才会显示在下面的代码中。 因此,没有显示defaultValue =“false”的键。 如何获取我的首选项文件中的所有密钥列表呢? PreferenceManager.setDefaultValues(this,R.xml.settings,true); //readAgain=false is same result SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this); Map prefMap=prefs.getAll(); for(String key:prefMap.keySet()) { Log.d(“preference key=”,key); //only keys with true are shown } } 根据文档,getAll()应该:“从首选项中检索所有值。” 但是,它似乎只获取具有default = true的键,除非用户稍后设置了首选项。 编辑: 这可能与Android Bug:6441有关 ,但没有给我一个解决方法来获取所有密钥。

是否可以从DialogFragment构建DialogPreference?

我已经将目录选择器实现为DialogFragment ,现在我想在DialogPreference使用它。 可能吗? 怎么做?

通过资产字体更改PreferenceFragment字体

为了在PreferenceFragment中为每个Preference设置自定义字体,我必须为每个首选项types( CustomSwitchPreference , CustomEditTextPreference , CustomListPreference ,….)编写一个新的自定义类,并在onBindView方法中设置其字体。 它有效,但这是最好的解决方案吗? 不短吗? @Override public void onBindView(View view){ super.onBindView(view); TextView title = (TextView) view.findViewById(android.R.id.title); TextView summary = (TextView) view.findViewById(android.R.id.summary); Utils.setFont(context, title, customfont); Utils.setFont(context, summary, customfont); } public class Utils{ public static boolean setFont(Context context, TextView tv, String fontAssetName) { Typeface font = Typeface.createFromAsset(context.getResources().getAssets(), fontAssetName); if (font != null) { […]

PreferenceActivityvalidation用户输入并显示错误消息

我正在使用PreferenceActivity为用户定义应用程序的某些设置。 我还使用OnPreferenceChangeListener接口来获取更改首选项的通知,并且在该回调中,我可以对用户的输入进行validation,并且我可以在拒绝用户输入时做出更新决策。 当我检测到validation错误时,我想在屏幕上保持首选项编辑对话框处于活动状态,以便我可以使用.getTextEdit()。setError()方法设置错误消息以通知用户。 但是,我无法设法在屏幕上保持对话框处于活动状态,因为它似乎在OnPreferenceChangeListener回调执行之前就消失了。 有任何想法吗?

具有多个首选项文件的PreferenceActivity

在PreferenceActivity中使用首选项文件(而不是默认的共享首选项)的方法如下: public class MyPreferencesActivity extends PreferenceActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PreferenceManager prefMgr = getPreferenceManager(); prefMgr.setSharedPreferencesName(“my_preferences”); prefMgr.setSharedPreferencesMode(MODE_WORLD_READABLE); addPreferencesFromResource(R.xml.preferences); } } 在此示例中,我们使用名为“my_preferences”的共享首选项。 但是,我们如何在同一个PreferenceActivity中使用多个自定义首选项?

在xml中为PreferenceScreen设置Intent标志

我的PreferencesActivity的视图是通过XML填充的,在XML中我包含了一个PreferencesScreen来导航到系统的sync-preferences。 它使用下面的代码工作正常。 我的问题是,当我打开同步首选项时,打开主屏幕然后再次打开我的应用程序,打开同步设置,因为它们位于堆栈顶部。 是否有可能在xml中包含NEW_TASK-flag以告诉屏幕它是一个新任务而不是与我的应用程序堆栈相关联?

在Samsung Galaxy S上调用RingTonePreference时出现NullPointerException

我在三星Galaxy上调用RingTonePreference时收到以下消息(一切在其他手机上运行正常): java.lang.RuntimeException: Unable to start activity ComponentInfo{android/com.a ndroid.internal.app.RingtonePickerActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.access$2300(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:85 8) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.android.internal.app.RingtonePickerActivity.onPrepareListView(RingtonePic kerActivity.java:252) at com.android.internal.app.AlertController$AlertParams.createListView(AlertCont roller.java:909) at com.android.internal.app.AlertController$AlertParams.apply(AlertController.ja va:824) at com.android.internal.app.AlertActivity.setupAlert(AlertActivity.java:73) at com.android.internal.app.RingtonePickerActivity.onCreate(RingtonePickerActivi ty.java:226) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) […]