在Android中使用列表首选项

我有一个文本到语音应用程序,用户可以选择一种语言,也可以选择男性或女性的声音。 问题是,对于每种语言,有不同的字符串用于调用男性和女性的声音,但在我看来,我只有两个选项(男性和女性)。

 English (US) English (UK) French (France) Spanish (Spain) Italian   "en-US" "en-GB" "fr-FR" "es-ES" "it-IT"   Male Female   "usenglishmale" "usenglishfemale" "ukenglishmale" "ukenglishfemale" "eurfrenchmale" "eurfrenchfemale" "eurspanishmale" "eurspanishfemale" "euritalianmale" "euritalianfemale"  

我试图find一种方法,只根据选择的语言参考相关的男性和女性的声音。 是否可以在此处执行此操作,还是必须编写一些代码,根据所选语言更改voiceAlias数组的值?

提前致谢

Solutions Collecting From Web of "在Android中使用列表首选项"

好的,您可以使用两个ListPreference和一个OnPreferenceChangeListener来完成此操作。 首先是XML:

   

让我们在res / values / array.xml中创建一个新条目:

  0 1  

现在,在您对PreferenceActivity的扩展中,我们将获取在SharedPreferences中持久存在的字符串值,并从中创建一个全新的条目,从SharedPreferences中获取其值“VoiceAlias”。

 SharedPreferences shareprefs = getPreferenceManager().getSharedPreferences(); Resources resources = YourContext.getResources(); private void makeVoiceData() { String languageData = shareprefs.getString("language_preference", "en-US"); int genderData = Integer.parseInt(shareprefs.getString("gender_preference", "0")); String[] voiceAlias = resources.getStringArray(R.array.VoiceAlias); int a = 0 String[] languageAlias = resources.getStringArray(R.array.languageAlias); for (a ; a < languageAlias.length ; a++) { if (languageAlias[a].equals(languageData)) { break; } } shareprefs.putString("VoiceAlias", voiceAlias[(2 * a) + genderData]); } ListPreference language_preference = getPreference("language_preference"); ListPreference gender_preference = getPreference("gender_preference"); language_preference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { public boolean onPreferenceChanged(Preference preference, Object newValue) { shareprefs.putString("language_preference", (String) newValue); makeVoiceData(); } }); gender_preference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { public boolean onPreferenceChanged(Preference preference, Object newValue) { shareprefs.putString("gender_preference", (String) newValue); makeVoiceData(); } }); 

字符串数组可以使用字符串资源 这是转换用户值的最简单(也可能是最简单)方法。

  @string/value_1 @string/value_2  

请参阅使用字符串和字符串数组

对不起,我还没有评论答案,所以我开了一个新答案。

而不是编写自己的算法,以便在String数组中find特定项的索引,只需依靠标准API(通常更快,更好的设计,更短):

 final int a = Arrays.binarySearch(languageAlias, languageData); 

它与以下相同:

 int a = 0 for (a ; a < languageAlias.length ; a++) { if (languageAlias[a].equals(languageData) { break; } }