我有一个应用程序,我在其中使用AppCompatDelegate和values night。xml以编程方式切换到应用程序中的暗主题。我有一套活动。带有SettingsFragment的java,其中我设置了一个OnSharedPreferenceChangeListener来监听相应的SharedPreferences值。在设置页面中,我加入了暗模式设置。但是,在切换设置时,暗模式不会自动打开;相反,我必须退出设置活动,应用程序才能更改模式。这是我的代码:
设置ctivity.java
public class SettingsActivity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
toolbar = findViewById(R.id.toolbar_settings);
setSupportActionBar(toolbar);
if (findViewById(R.id.fragment_container)!=null) {
if (savedInstanceState!=null) {
return;
}
getFragmentManager().beginTransaction().add(R.id.fragment_container, new SettingsFragment()).commit();
}
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.settings_menu, menu);
return true;
}
public void savePrefs () {
SharedPreferences sharedPreferences = getSharedPreferences("Shared_Preferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
}
}
设置碎片。JAVA
public class SettingsFragment extends PreferenceFragment {
public int currTheme;
public static final String theme = "theme";
private SharedPreferences.OnSharedPreferenceChangeListener listener;
private ViewGroup parent;
private View currView;
@Override
public void onCreate(@Nullable Bundle SavedInstanceState) {
super.onCreate(SavedInstanceState);
addPreferencesFromResource(R.xml.preferences);
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
Preference preference = findPreference(s);
if (s.equals(theme)) {
currTheme = Integer.valueOf(sharedPreferences.getString(s, "0"));
switch (currTheme) {
case 2 :
preference.setSummary("Dark");
break;
case 1 :
preference.setSummary("Light");
break;
default:
preference.setSummary("System Settings");
}
preference.setTitle("Theme");
} ...
}
};
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
parent = container;
currView = view;
view.setBackgroundColor(ContextCompat.getColor(parent.getContext(), R.color.colorPrimary));
return view;
}
@Override
public void onResume() {
super.onResume();
setPreferenceScreen(null);
addPreferencesFromResource(R.xml.preferences);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(listener);
...
preferenceTheme.setTitle("Theme");
int themeSet = Integer.valueOf(getPreferenceScreen().getSharedPreferences().getString(theme, "System Settings"));
switch (themeSet) {
case 2 :
preferenceTheme.setSummary("Dark");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
break;
case 1 :
preferenceTheme.setSummary("Light");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
break;
default :
preferenceTheme.setSummary("System Default");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
}
currView.setBackgroundColor(ContextCompat.getColor(parent.getContext(), R.color.cpWhite));
parent.getContext().setTheme(R.style.PreferenceTheme);
}
@Override
public void onStart() {
super.onStart();
setPreferenceScreen(null);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener);
}
}
运行时,片段确实记录了主题的更改,但它不会更改主题。事情是这样的:
黑暗主题集:
更改为轻主题:
首选项设置为“灯光主题”,但主题未设置为“灯光”:
这个问题有解决办法吗?
在首选项更改侦听器中(仅在onResume中)似乎没有包含任何主题设置逻辑。
尝试在侦听器中包含AppCompatDelegate.setDefaultNnight Mode(...)。
在 macOS 10.14 Mojave中, Apple 为所有 macOS 电脑引入了一个全新的 系统级黑暗模式。 If your app does have a dark mode, you can make your Electron app follow the system-wide dark mode setting. In macOS 10.15 Catalina, Apple in
我从eclipse.org下载了。并且我更改了上的主题。但这不是我想要的。 我如何做完全黑暗?
问题内容: 我搜索了许多看起来像这样的问题,但没有找到我的答案。 我有一个活动,该活动具有3个可通过操作栏访问的选项卡。我通过添加3个片段来实现这一点,这些片段使我自定义视图扩展了视图类。 在数据库更改的那一刻,我尝试通过调用invalidate()/ postinvalidate()刷新选项卡中的视图,但这不起作用。正如我考虑的其他许多选项一样,调用片段的onCreateView也是如此。 但是
我有Mainactive,它保存片段。我的一个片段(参与者)检查数据库中是否有任何内容。如果没有,则显示带有消息以添加数据的片段(空参与者列表)。如果是,它显示带有2个选项卡的TabHost片段,其中一个包含带有数据库条目的ListView片段(参与者列表)。有一个FAB按钮可以添加更多记录。添加另一条记录后如何刷新ListView?我不确定,因为TabHost不适用于我在应用程序中使用的Frag
我正试图为我的Android应用程序支持Android Q Dark主题,但我不知道如何根据我目前所在的主题导入不同的资产。 Im使用官方的DayNight主题来制作dark/light版本和drawables非常容易,只需指向XML,它将根据启用的内容从values或values-night中选择正确的值。
我到处找了一会儿,只好“硬着头皮学”: Activity、AppCompatActivity、FragmentActivity和ActionBarActivity:何时使用哪个? 用风格开发主题(Android Dev Summit'19)