Ama*_*nni 29 android text-to-speech preferences listpreference
我有一个文本到语音应用程序,用户可以选择一种语言,并选择男性或女性的声音.问题是,对于每种语言,有不同的字符串用于调用男性和女性的声音,但在我看来,我只有两种选择(男性和女性).
<string-array name="Language">
<item>English (US)</item>
<item>English (UK)</item>
<item>French (France)</item>
<item>Spanish (Spain)</item>
<item>Italian</item>
</string-array>
<string-array name="languageAlias">
<item>"en-US"</item>
<item>"en-GB"</item>
<item>"fr-FR"</item>
<item>"es-ES"</item>
<item>"it-IT"</item>
</string-array>
<string-array name="Voice">
<item>Male</item>
<item>Female</item>
</string-array>
<string-array name="VoiceAlias">
<item>"usenglishmale"</item>
<item>"usenglishfemale"</item>
<item>"ukenglishmale"</item>
<item>"ukenglishfemale"</item>
<item>"eurfrenchmale"</item>
<item>"eurfrenchfemale"</item>
<item>"eurspanishmale"</item>
<item>"eurspanishfemale"</item>
<item>"euritalianmale"</item>
<item>"euritalianfemale"</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)
我试图找到一种方法,只根据选择的语言参考相关的男性和女性语音.是否可以在此处执行此操作,还是必须编写一些代码,根据所选语言更改voiceAlias数组的值?
提前致谢
gob*_*dor 58
好的,你可以用两个ListPreferences和一个来完成这个OnPreferenceChangeListener.首先是XML:
<ListPreference
android:key="language_preference"
android:title="Language"
android:entries="@array/Language"
android:entryValues="@array/languageAlias"/>
<ListPreference
android:key="gender_preference"
android:title="Gender"
android:entries="@array/Voice"
android:entryValues="@array/VoiceData"/>
Run Code Online (Sandbox Code Playgroud)
让我们在res/values/array.xml中创建一个新条目:
<string-array name="VoiceData">
<item>0</item>
<item>1</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)
现在,在你的扩展中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();
}
});
Run Code Online (Sandbox Code Playgroud)
字符串数组可以使用字符串资源 这是翻译用户值的最简单(也可能是最简单)方法.
<string-array name="user_values">
<item>@string/value_1</item>
<item>@string/value_2</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)
请参阅使用字符串和字符串数组
| 归档时间: |
|
| 查看次数: |
67753 次 |
| 最近记录: |