You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:如何基于字符串数组实现Spinner多语言切换功能

How to Implement Language Switch with Spinner Selection

Hey there! Let's walk through getting this functionality up and running smoothly. Here's what you need to do, step by step:

1. First, Make Sure Your Spinner is Properly Linked to the String Array

Before handling selection logic, you need to connect your <string-array> to the Spinner in your Activity. Add this code to your onCreate method:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout); // Replace with your actual layout file

    Spinner languageSpinner = findViewById(R.id.your_spinner_id); // Replace with your Spinner's ID
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this,
            R.array.language,
            android.R.layout.simple_spinner_item
    );
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    languageSpinner.setAdapter(adapter);
    languageSpinner.setOnItemSelectedListener(this);
}

2. Fill in the onItemSelected Logic

Now let's implement the selection handling, Toast display, and language switch. Important: The setLanguage method needs standard language codes (like "fr" for French, "en" for English) instead of full country names, so we'll map the selected item to the correct code.

@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    // Get the selected language name from the spinner
    String selectedLanguageName = parent.getItemAtPosition(pos).toString();
    
    // Show the Toast with the selected name
    Toast.makeText(this, selectedLanguageName, Toast.LENGTH_SHORT).show();
    
    // Map the displayed name to the correct language code
    String languageCode;
    switch(selectedLanguageName) {
        case "France":
            languageCode = "fr";
            break;
        case "English":
            languageCode = "en";
            break;
        default:
            languageCode = "en"; // Fallback to English if an unexpected item is selected
            break;
    }
    
    // Switch the app's language
    setLanguage(languageCode);
    
    // Restart the Activity to apply language changes immediately
    Intent refreshIntent = getIntent();
    finish();
    startActivity(refreshIntent);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
    // Optional: Handle the case where no item is selected
    Toast.makeText(this, "No language selected", Toast.LENGTH_SHORT).show();
    setLanguage("en");
}

3. Tweak the setLanguage Method

Ensure mylocale is declared as a class-level variable in your Activity, then use your existing method:

private Locale mylocale; // Add this as a class variable in SPinnerActivity

protected void setLanguage(String language) {
    mylocale = new Locale(language);
    Resources resources = getResources();
    DisplayMetrics dm = resources.getDisplayMetrics();
    Configuration conf = resources.getConfiguration();
    conf.locale = mylocale;
    resources.updateConfiguration(conf, dm);
}

Key Tips to Keep in Mind

  • Language Codes: Always use ISO 639-1 language codes (not country names) when creating a Locale—this ensures compatibility across all Android versions.
  • Activity Restart: Restarting the Activity is necessary to refresh all UI elements with the new language.
  • Fallback Case: The default switch case prevents crashes if an unexpected item ends up in the spinner.

内容的提问来源于stack exchange,提问作者asqa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:24:17