在ApiDemos for Android 4.0中尝试不同的首选项活动,我在代码中看到,例如,在PreferencesFromCode.java中不推荐使用某些方法.
所以我的问题是:如果我使用PreferenceFragment,它是适用于所有版本还是仅适用于3.0或4.0及更高版本?
如果是这样,我应该使用哪种适用于2.2和2.3呢?
问题
将设备从单窗格纵向旋转PreferenceScreen到双窗格环境PreferenceScreen,导致横向仅显示为单窗格.查看标题屏幕时不会发生.
设置
仅适用于ICS及以上版本.我有一个PreferenceActivity负载preference-headers.每个标题链接一个Fragment,然后加载一个PreferenceScreen.相当运行的mil.
细节
一切运作良好,直到我注意到Android只会自动切换到某个屏幕的双窗格外观.经过一些研究,我从一篇Commonsware帖子中了解到,Android只会针对sw720dp这样做.如果你问我我有点浪费,因为许多设备def有足够的空间用于双窗格.所以我重写了onIsMultiPane()为w600dp和up返回true 的方法.工作就像一个魅力......有点儿.
给定一个设备,将在纵向和双窗格中显示单窗格; 以纵向查看标题并旋转到横向,工作正常.但是,如果选择一个标题并以纵向模式加载它的后续屏幕,则旋转到横向设备将保持单窗格而不是切换回双窗格.如果您然后返回导航到标题屏幕,它将返回双窗格外观,但它不会预先选择标题.因此,详细窗格保持空白.
这是预期的行为吗?无论如何要解决它吗?我也试过覆盖onIsHidingHeaders(),但这只会导致一切都显示为空白.
代码
偏好活动:
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
loadHeadersFromResource(R.xml.preference, target);
}
@Override
public boolean onIsMultiPane() {
return getResources().getBoolean(R.bool.pref_prefer_dual_pane);
}
}
Run Code Online (Sandbox Code Playgroud)
首选项标题片段:
public class ExpansionsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_expansions);
}
public static ExpansionsFragment newInstance() {
ExpansionsFragment frag = new …Run Code Online (Sandbox Code Playgroud) java android preferenceactivity android-preferences android-fragments
美好的一天,朋友们.我有一个PreferenceActivity,它是从XML文件填充的.当我们按下一个项目时,我们应该启动新的活动.怎么做?我应该在XML文件或Java类中编写什么?
android preferenceactivity android-preferences android-activity
有没有办法动态显示和隐藏首选项?在我的情况下,我有一个复选框首选项,可以禁用或启用2个首选项组之一("with-"和"without-handicap"组).虽然这将是桌面环境中的理想GUI,但"带障碍"几乎占据整个屏幕,而另一个"无障碍"仅占用屏幕的一小部分.
我不是同时显示两个组,而是一次只显示其中一个组,并在复选框更改时动态显示或隐藏2个组.有没有办法做到这一点?
我有一个像这样定义的简单首选项屏幕
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Security">
<CheckBoxPreference
android:title="Require Pin on Start"
android:summary="Require pin to run the application"
android:key="@string/pref_require_pin"
android:defaultValue="false" />
</PreferenceCategory>
<PreferenceCategory android:title="Settings">
<ListPreference
android:title="History Age (in days)"
android:summary="Display items up to 30 days old"
android:key="@string/pref_history_days"
android:defaultValue="30"
android:entries="@array/days_list"
android:entryValues="@array/days_list"
android:dialogTitle="Select History Age"/>
</PreferenceCategory>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我已经有一个样式设置,并在我的应用程序的其他地方使用
<style name="ListHeader">
<item name="android:textColor">#000000</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">12sp</item>
<item name="android:background">#cccccc</item>
<item name="android:paddingTop">6px</item>
<item name="android:paddingBottom">6px</item>
<item name="android:paddingLeft">12px</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这是我的活动
public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.preferences);
}
} …Run Code Online (Sandbox Code Playgroud) android preferenceactivity android-preferences android-layout
根据以下代码,您能告诉我如何刷新PreferenceActivity窗口以立即显示设置中的更改吗?例如:用户点击主chime切换复选框为true(勾选),我希望用户立即看到其他设置,如ChimeOn15Past复选框也是true(勾选)
SharedPreferences.Editor prefEditor = clockSettings.edit(); // Allow the settings to be changed.
if (booleanMasterChimeToggle == true) {
prefEditor.putBoolean("ChimeOnTheHour", true);
prefEditor.putBoolean("ChimeOn15Past", true);
prefEditor.putBoolean("ChimeOn30Past", true);
prefEditor.putBoolean("ChimeOn45Past", true);
strNotifyMessage = "Full chiming has now been set.";
} else {
prefEditor.putBoolean("ChimeOnTheHour", false);
prefEditor.putBoolean("ChimeOn15Past", false);
prefEditor.putBoolean("ChimeOn30Past", false);
prefEditor.putBoolean("ChimeOn45Past", false);
strNotifyMessage = "Full chiming has now been disabled.";
}
Run Code Online (Sandbox Code Playgroud) 我在PreferenceFragment中获取一些自定义DialogPreference子类时遇到了一些麻烦,以便在旋转屏幕时保持可见.我在使用PreferenceActivity时没有遇到这个问题,因此我不知道它是Android错误还是代码问题,但我希望有人确认他们是否有相同的体验.
要对此进行测试,首先要创建一个包含至少一个DialogPreference的首选项屏幕(哪个子类无关紧要).然后在PreferenceActivity中显示它.运行应用程序时,请按DialogPreference以显示其对话框.然后旋转屏幕以使方向发生变化.对话框是否仍然可见?
然后尝试相同,但使用PreferenceFragment显示您的首选项而不是PreferenceActivity.再次,旋转屏幕时对话框是否仍然可见?
到目前为止,我发现如果使用PreferenceActivity,对话框将保持可见,但如果使用PreferenceFragment则不会.查看DialogPreference的源代码,似乎正确的行为是对话框保持可见,因为在屏幕isDialogShowing重定向时onSaveInstanceState()调用时会保存状态信息.因此,我认为一个错误可能会阻止PreferenceFragment(及其中的所有内容)恢复该状态信息.
如果它是Android错误,那么它具有深远的影响,因为任何使用PreferenceFragment的人都无法保存和恢复状态信息.
有人可以确认吗?如果它不是一个错误,那么发生了什么?
android preferenceactivity android-preferences android-fragments dialog-preference
我在我的应用程序中添加了preference-headers,以便在Honeycomb和平板电脑大小的ICS上看起来不会出现偏好屏幕.但是,我目前只有一个标题,因此您必须在电话大小的设备上只有一个条目点击标题屏幕.有没有一种简单的方法可以告诉android跳过标题屏幕,当只有一个标题,但仍然在大屏幕上显示它?
似乎股票联系人应用程序成功完成了这一点,但我浏览了它的来源,无法弄清楚它是如何做到的.
我找到了一种解决方法,可以在嵌套的PreferenceScreen上实际启用ActionBar主页按钮...但是它不会在我的PreferenceActivity中调用OnOptionsItemSelected.有人知道在嵌套的PreferenceScreen上实际使用主页按钮的方法吗?
这里修改第35篇:
http://code.google.com/p/android/issues/detail?id=4611
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)
{
super.onPreferenceTreeClick(preferenceScreen, preference);
if (preference!=null)
if (preference instanceof PreferenceScreen)
if (((PreferenceScreen)preference).getDialog()!=null)
((PreferenceScreen)preference).getDialog().getActionBar().setHomeButtonEnabled(true);
return false;
}
Run Code Online (Sandbox Code Playgroud) java android preferenceactivity sharedpreferences android-actionbar
我PreferenceActivity在v20 sdk示例中提供了DoneBar(操作栏中的两个按钮),但在将SDK和AppCompat更新到版本21后,我的应用程序崩溃了
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayOptions(int, int)' on a null object reference
那是因为getActionBar()返回null.并没有getSupportActionBar()在ActionBarActivity.
所以我的问题是如何获取actionbar对象,PreferenceActivity以便我可以在其上应用自定义视图?
解决了
经过一些研究后,我设法通过使用来解决这个问题PreferenceFragment,ActionBarActivity所以我可以打电话getSupportActionBar()