如何根据列表视图中的用户选择更改完整Android应用程序的语言?

时间:2018-03-22 15:24:53

标签: android listview locale

我正在创建一个Android应用程序。我想要一个屏幕,要求用户选择他们的首选语言。这是我的listview的代码。

public class LanguageSelect extends Activity {                          
int[] IMAGES = {R.drawable.english, R.drawable.french, R.drawable.spanish, R.drawable.german, R.drawable.swedish, R.drawable.russia};

String[] NAMES = {"English", "Français", "Español", "Deutsche", "svenska", "русский"};

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_language_select);

    ListView listView = (ListView)findViewById(R.id.Lang);

    CustomAdpater customadapter = new CustomAdpater();

    listView.setAdapter(customadapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            if(i==0)
            {
                LangHelper.changeLocale(this.getResources(), "fr");
            }
        }
    });
}

class CustomAdpater extends BaseAdapter{
    @Override
    public int getCount() {
        return IMAGES.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup)
    {
        view = getLayoutInflater().inflate(R.layout.custom_layout_lang,null);

        ImageView imageView=(ImageView)view.findViewById(R.id.imageView);
        TextView textViewLang=(TextView)view.findViewById(R.id.textViewLang);

        imageView.setImageResource(IMAGES[i]);
        textViewLang.setText(NAMES[i]);

        return view;
    }
}}

我还从我发现的教程中为我希望使用的语言创建了几个string.xml文件。见下图

strings.xml image

我还创建了一个LangHelper类。见下文

public class LangHelper {

public static void changeLocale(Resources res, String locale)
{
    Configuration config;
    config = new Configuration(res.getConfiguration());

    switch (locale) {
        case "es":
            config.locale = new Locale("es");
            break;
        case "fr":
            config.locale = new Locale("fr");
            break;
        default:
            config.locale = new Locale("en");
    }
    res.updateConfiguration(config, res.getDisplayMetrics());
}}

我现在的问题是将LangHelper类连接到Listview,以便当用户从列表中选择所需的语言时,以下页面即完整的应用程序现在被翻译成用户选择的语言

2 个答案:

答案 0 :(得分:0)

是的,您的代码是正确的,如果您需要而不刷新应用程序

然后在应用课程中,您需要在onCreate()方法中调用此方法

String languageSelected = "en";//selected language
Locale myLocale = new Locale(languageSelected);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
getActivity().onConfigurationChanged(conf);//Call this method

您需要执行此特定语言才能在Application类中选择。

答案 1 :(得分:0)

试试这个:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        TextView textViewLang=(TextView)view.findViewById(R.id.textViewLang);
        String lang = textViewLang.getText():
        LangHelper.changeLocale(this.getResources(), lang);
    }
});