[英]Java code does not work properly - why so?
I am new to Java and Android Studio, I decided to get Spinner to switch the application theme in the settings, but the program does not work correctly.我是 Java 和 Android Studio 的新手,我决定让 Spinner 在设置中切换应用程序主题,但程序无法正常工作。
When you select “Light Theme” in SharedPreferences, “Dark Theme” is saved, when you select “Dark Theme” - “Dark Gray Theme”, “Dark Gray Theme” - “Light Theme”.当您在 SharedPreferences 中 select “浅色主题”时,“深色主题”被保存,当您 select “深色主题” - “深灰色主题”,“深灰色主题” - “浅色主题”时。 I need to correct this misunderstanding.
我需要纠正这个误解。 Method "ThemeUtils.changeToTheme (Theme);"
方法“ThemeUtils.changeToTheme(主题);” not implemented.
未实现。
SettingsActivity
设置活动
public class SettingsActivity extends AppCompatActivity {
SharedPreferences colorPref;
public static final String COLOR_PREF = "l";
Spinner ThemeSpinner;
String Theme;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
colorPref = getSharedPreferences(COLOR_PREF, Context.MODE_PRIVATE);
ThemeSpinner = (Spinner) findViewById(R.id.SpinnerTheme);
final ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this, R.array.Themes, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
ThemeSpinner.setAdapter(adapter);
ThemeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
Theme = (String)adapterView.getItemAtPosition(position
colorPref = getPreferences(MODE_PRIVATE);
boolean hasVisited = colorPref.getBoolean("hasVisited", false);
String savedTheme = colorPref.getString(COLOR_PREF, "");
if (!hasVisited) {
SharedPreferences.Editor e = colorPref.edit();
String savedTheme_First = getString(R.string.Pink_White);
savedTheme = savedTheme_First; e.putString(COLOR_PREF, savedTheme);
e.putBoolean("hasVisited", true);
e.apply();
}
if(savedTheme != Theme){
SaveTheme();
ThemeUtils.changeToTheme(Theme);
Toast toast = Toast.makeText(getApplicationContext(), "Selecrted : " + savedTheme, Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public void SaveTheme(){
colorPref = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor ed = colorPref.edit();
ed.putString(COLOR_PREF, Theme);
ed.apply();
}
Array.xml
数组.xml
<string-array name="Themes">
<item>@string/Pink_White_rus</item>
<item>@string/Pink_Dark_rus</item>
<item>@string/Pink_VeryDark_rus</item>
</string-array>
strings.xml
字符串.xml
<string name="Pink_White">Light Theme</string>
<string name="Pink_Dark">Dark Gray Theme</string>
<string name="Pink_VeryDark">Dark Theme</string>
Spinner positions can be maintained by storing their position value as provided by the OnItemSelectedListener, this can be stored in SharedPreferences and then this can be set as spinner.setSelection() method call可以通过存储 OnItemSelectedListener 提供的 position 值来维护微调器位置,这可以存储在 SharedPreferences 中,然后可以将其设置为 spinner.setSelection() 方法调用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.