如何从Android的应用程序设置中选择语言?

问题描述

我正在尝试按照用户在应用程序设置(而非系统)中选择的语言在日历中添加日期。 我在适配器中,当我使用mLocale时,应用程序关闭

public static class DayOfWeekViewHolder extends RecyclerView.ViewHolder {

    private Context mContext;

    public DayOfWeekViewHolder(ViewGroup parent,LayoutInflater inflater) {
        super(inflater.inflate(R.layout.view_calendar_header_date,parent,false));
    }

    public void setData(int dayOfWeek) {

        String mLocale = mContext.getResources().getConfiguration().getLocales().get(0).getLanguage();

        LocalDate date = LocalDate.Now().minusDays(1);
        System.out.println("Test 1" + mLocale);
        date = date.plusDays(dayOfWeek);
        String dayText = date.getDayOfWeek().toString();
        String formatedDate =  date.format(DateTimeFormatter.ofPattern("EEE",Locale.forLanguageTag(Locale.getDefault().getCountry())));

        ((TextView) itemView).setText(formatedDate);
        itemView.setContentDescription(dayText);
    }
}

解决方法

您可以使用SharedPreferenceshttps://developer.android.com/reference/android/content/SharedPreferences

SharedPreferences settings = getSharedPreferences("PREF_FILE_NAME",MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("lang","US_EN");
editor.apply();

以后您可以检索它:

SharedPreferences settings = getSharedPreferences("PREF_FILE_NAME",MODE_PRIVATE);
settings.getString("lang","DEFAULT_LANGUAGE");

我的偏好设置文件的名称保存为String中的res/values/strings

,

您可以从资源中获取它:

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
      return getResources().getConfiguration().getLocaleList().get(0).getLanguage();
   else
      return getResources().getConfiguration().getLocale().getLanguage();