我在设计偏好屏幕时遇到了非常奇怪的问题.虽然我没有给出任何布局余量,但是左边留有一些空间.
如下图所示:

XML:
<PreferenceScreen android:title="demo" >
<CheckBoxPreference
android:defaultValue="false"
android:key="prefSync"`
android:title="Auto Sync" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
我在屏幕上添加复选框首选项时做错了什么?
我想支持至少api 10,我希望能够很好地设置我的偏好,我希望能够有标题(或显示PreferenceScreens).似乎PreferenceActivity不完全支持AppCompat着色,不适合.所以我正在尝试使用AppCompatActivity和PreferenceFragmentCompat.
public class Prefs extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null)
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, new PreferencesFragment())
.commit();
}
public static class PreferencesFragment extends PreferenceFragmentCompat {
@Override public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onDisplayPreferenceDialog(Preference preference) {
// the following call results in a dialogue being shown
super.onDisplayPreferenceDialog(preference);
}
@Override public void onNavigateToScreen(PreferenceScreen preferenceScreen) {
// I can probably …Run Code Online (Sandbox Code Playgroud) android android-appcompat android-preferences android-support-library
当我尝试使用Android的开发人员指南和教程使用"首选项"创建"设置活动"时,我收到警告,例如:
"不推荐使用PreferenceActivity类型的方法addPreferencesFromResource(int)"
对于代码中的这两行:
getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
addPreferencesFromResource(R.xml.default_values);
Run Code Online (Sandbox Code Playgroud)
我知道这些只是警告,但是当我运行我正在设计的应用程序时,我想知道它们现在还是将来是否会引起任何问题.
public class DefaultValues extends PreferenceActivity {
static final String PREFS_NAME = "defaults";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPrefs(this);
getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
addPreferencesFromResource(R.xml.default_values);
}
static SharedPreferences getPrefs(Context context) {
PreferenceManager.setDefaultValues(context, PREFS_NAME, MODE_PRIVATE,
R.xml.default_values, false);
return context.getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
}
}
Run Code Online (Sandbox Code Playgroud) android deprecated preferenceactivity android-preferences sharedpreferences
我有一个正在开发的Android应用程序,最小sdk =21。在其中,我使用了一个自定义的PreferenceActivity,该自定义的PreferenceActivity依次调用了PreferenceFragment。但是,在最近更新到API 28之后,我注意到getFragmentManager()方法已被弃用。我浏览了相关的Android开发人员页面,了解到Fragment类已被弃用或类似的东西。为了清楚起见,我的PreferencesActivity类代码如下:
public class PreferencesActivity extends PreferenceActivity{
static int layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
boolean isDark = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("darkTheme", false);
if (isDark) setTheme(R.style.AppTheme_Dark_NoActionBar_BlendStatusBar);
layout = isDark? R.style.AlertDialogCustom_Dark: R.style.AlertDialogCustom;
super.onCreate(savedInstanceState);
// TODO: 08/09/2018 Deprecated
getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit();
}
public static class PreferencesFragment extends PreferenceFragment {
// Preferences code here...
}
Run Code Online (Sandbox Code Playgroud) android preferenceactivity android-fragments fragmentmanager
测试android.preference.PreferenceActivity 时,我收到以下警告:
警告:[deprecation] Activity 中的 getFragmentManager() 已被弃用
这就是我如何获得当前的句柄PreferenceFragment:
FragmentManager fm = this.mActivity.getFragmentManager();
this.currentFragment = (PreferenceFragment) fm.getFragments().get(1);
Run Code Online (Sandbox Code Playgroud)
使用FragmentActivity.getSupportFragmentManager()显然不是一种选择。
我找到了PreferenceFragmentCompat,它将取代已弃用的PreferenceFragment.
但是有什么androidx替代品PreferenceActivity吗?
android android-preferences android-fragments deprecation-warning androidx
I am using Google Maps on my Android App. Before a gradle the new version of Google Play Services it works with the following code to get the Fragment:
GoogleMap googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
Run Code Online (Sandbox Code Playgroud)
自从我更新到版本 9.2.1 以来,.getMap() 是红色的(已弃用)。有没有新的做法来声明fragment?
谢谢你的每一个回应?