您将需要一个自定义的SpinnerAdapter。
首先,让我们建立我们的 XML。
我们将只使用字符串数组来定义语言列表的顺序。
我们还将在这里定义正确的语言代码。
在/res/values/strings.xml 中(即不是特定于语言环境的):
<string-array name="spinner_lang">
<item>en</item>
<item>es</item>
<item>fr</item>
</string-array>
<string-array name="spinner_lang_code">
<item>code_en</item>
<item>code_es</item>
<item>code_fr</item>
</string-array>
<string name="code_en">en-US</string>
<string name="code_es">es-ES</string>
<string name="code_fr">fr-FR</string>
现在,在您的语言环境特定的 string.xml 文件中,我们将定义语言名称。
例如,在/res/values-en/strings.xml
<string name="en">English</string>
<string name="es">Spanish</string>
<string name="fr">French</string>
让我们创建一个简单的(内部)类来保存我们的语言数据:
public static class Lang {
String mCode;
String mName;
public Lang(String code, String name) {
this.mCode = code;
this.mName = name;
}
}
现在我们应该有所有东西来编写我们的适配器了:
public static class LanguageSelectionAdapter extends BaseAdapter {
private Lang[] mLangs;
public LanguageSelectionAdapter(Context context) {
Resources resources = context.getResources();
String[] codes = resources.getStringArray(R.id.spinner_lang_code);
String[] names = resources.getStringArray(R.id.spinner_lang);
mLangs = new Lang[names.length];
for (int i = 0; i < names.length; i++) {
int codeRes = resources.getIdentifier(codes[i], "string", null);
String code = resources.getString(codeRes);
int nameRes = resources.getIdentifier(names[i], "string", null);
String name = resources.getString(nameRes);
mLangs[i] = new Lang(code, name);
}
}
@Override
public int getCount() {
return mLangs == null ? 0 : mLangs.length;
}
@Override
public Object getItem(int position) {
return mLangs == null ? null : mLangs[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
text1.setText(mLangs[position].mName);
return convertView;
}
}
现在当有人从Spinner 中选择项目时,您需要根据他们选择的语言名称获取语言代码:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
LanguageSelectionAdapter adapter = (LanguageSelectionAdapter) parent.getAdapter();
Lang lang = (Lang) adapter.getItem(position);
String langCode = lang.mCode;
Locale locale = Locale.forLanguageTag(langCode);
// ... switch your Locale here
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});