语言更改时 RecyclerView 不会更改资源值
RecyclerView not changing resource values when language change
我正在使用下面的代码将我的应用程序的语言更改为阿拉伯语。但是当它改变时,RecyclerView
中的资源并没有改变。它只是改变方向(在 Activity
内),所有其他视图都在改变值。 (mipmap,字符串),但片段内 RecyclerView 的值没有改变。
Class 文件
Locale locale;
Sessions session = new Sessions(context);
if (session.getLanguage().equals("1")) {
locale = new Locale("en-rU");
}
else{
locale = new Locale("ar");
}
Locale.setDefault(locale);
Configuration config = new Configuration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocale(locale);
} else {
config.locale = locale;
}
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
}
布局xml文件
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/spotList"
tools:listitem="@layout/recycler_spot"/>
适配器Class
public class ItemsAdapter extends RecyclerView.Adapter<ItemsAdapter.CustomViewHolder> {
Context context;
OnItemClick onItemClick;
public ItemsAdapter(Context context){
this.context=context;
}
@NonNull
@Override
public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view= LayoutInflater.from(context).inflate(R.layout.recycler_items,viewGroup,false);
return new CustomViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CustomViewHolder customViewHolder, int i) {
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public int getItemCount() {
return 6;
}
public class CustomViewHolder extends RecyclerView.ViewHolder {
public CustomViewHolder(@NonNull View itemView) {
super(itemView);
}
}
public interface OnItemClick{
public void onItemClick(int position);
}
}
我找到了解决方案。
我在 Recyclerview 适配器的构造函数中调用它。不知道方法对不对,问题还是解决了
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public static void setResources(Context context) {
Locale locale;
Sessions session = new Sessions(context);
//Log.e("Lan",session.getLanguage());
if (session.getLanguage().equals("1")) {
locale = new Locale("en-rUS");
}else{
locale = new Locale("ar");
}
Resources res=context.getResources();
DisplayMetrics dm=res.getDisplayMetrics();
android.content.res.Configuration configuration=res.getConfiguration();
configuration.setLocale(locale);
res.updateConfiguration(configuration,dm);
}
我使用以下功能更改我的应用语言。
public void setUserMobileLanguage(String sUserLanguageCode) {
try {
String[] arrLngCode = sUserLanguageCode.split("-");
if (arrLngCode.length > 1)
sUserLanguageCode = arrLngCode[0];
if (sUserLanguageCode.equals("he")) {
sUserLanguageCode = "iw";
}
if (sUserLanguageCode.equals("en")) {
new LocalHelper().setLocal(mContext, sUserLanguageCode); //set app en language
getHelper().setAppLanguage(sUserLanguageCode); //store for later use
} else {
if (!Utilty.isLanguageAvailableInMobile(sUserLanguageCode)) { //check language available in mobile
sUserLanguageCode = "en";//set english as app language
makeToast(getString(R.string.selected_language_is_not_support_by_your_mobile));
}
new LocalHelper().setLocal(mContext, sUserLanguageCode); //set app language
getHelper().setAppLanguage(sUserLanguageCode); //store for later use
}
} catch (Exception e) {
e.printStackTrace();
}
}
检查系统支持语言或不使用以下代码。
public static boolean isLanguageAvailableInMobile(String lngCode) {
return Arrays.toString(Locale.getAvailableLocales()).contains(lngCode);
}
我的字符串资源文件示例。
使用上面的代码和资源文件,我可以更改我的应用程序布局和文本。
当您从 activity(不是从片段)设置适配器时,确保调用 getBaseContext
作为上下文参数:
yourAdapter = new YourAdapter(userIDArr, profileIDArr, ... getBaseContext());
yourRecyclerView.setAdapter(yourAdapter);
我正在使用下面的代码将我的应用程序的语言更改为阿拉伯语。但是当它改变时,RecyclerView
中的资源并没有改变。它只是改变方向(在 Activity
内),所有其他视图都在改变值。 (mipmap,字符串),但片段内 RecyclerView 的值没有改变。
Class 文件
Locale locale;
Sessions session = new Sessions(context);
if (session.getLanguage().equals("1")) {
locale = new Locale("en-rU");
}
else{
locale = new Locale("ar");
}
Locale.setDefault(locale);
Configuration config = new Configuration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocale(locale);
} else {
config.locale = locale;
}
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
}
布局xml文件
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/spotList"
tools:listitem="@layout/recycler_spot"/>
适配器Class
public class ItemsAdapter extends RecyclerView.Adapter<ItemsAdapter.CustomViewHolder> {
Context context;
OnItemClick onItemClick;
public ItemsAdapter(Context context){
this.context=context;
}
@NonNull
@Override
public CustomViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view= LayoutInflater.from(context).inflate(R.layout.recycler_items,viewGroup,false);
return new CustomViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CustomViewHolder customViewHolder, int i) {
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public int getItemCount() {
return 6;
}
public class CustomViewHolder extends RecyclerView.ViewHolder {
public CustomViewHolder(@NonNull View itemView) {
super(itemView);
}
}
public interface OnItemClick{
public void onItemClick(int position);
}
}
我找到了解决方案。
我在 Recyclerview 适配器的构造函数中调用它。不知道方法对不对,问题还是解决了
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public static void setResources(Context context) {
Locale locale;
Sessions session = new Sessions(context);
//Log.e("Lan",session.getLanguage());
if (session.getLanguage().equals("1")) {
locale = new Locale("en-rUS");
}else{
locale = new Locale("ar");
}
Resources res=context.getResources();
DisplayMetrics dm=res.getDisplayMetrics();
android.content.res.Configuration configuration=res.getConfiguration();
configuration.setLocale(locale);
res.updateConfiguration(configuration,dm);
}
我使用以下功能更改我的应用语言。
public void setUserMobileLanguage(String sUserLanguageCode) {
try {
String[] arrLngCode = sUserLanguageCode.split("-");
if (arrLngCode.length > 1)
sUserLanguageCode = arrLngCode[0];
if (sUserLanguageCode.equals("he")) {
sUserLanguageCode = "iw";
}
if (sUserLanguageCode.equals("en")) {
new LocalHelper().setLocal(mContext, sUserLanguageCode); //set app en language
getHelper().setAppLanguage(sUserLanguageCode); //store for later use
} else {
if (!Utilty.isLanguageAvailableInMobile(sUserLanguageCode)) { //check language available in mobile
sUserLanguageCode = "en";//set english as app language
makeToast(getString(R.string.selected_language_is_not_support_by_your_mobile));
}
new LocalHelper().setLocal(mContext, sUserLanguageCode); //set app language
getHelper().setAppLanguage(sUserLanguageCode); //store for later use
}
} catch (Exception e) {
e.printStackTrace();
}
}
检查系统支持语言或不使用以下代码。
public static boolean isLanguageAvailableInMobile(String lngCode) {
return Arrays.toString(Locale.getAvailableLocales()).contains(lngCode);
}
我的字符串资源文件示例。
使用上面的代码和资源文件,我可以更改我的应用程序布局和文本。
当您从 activity(不是从片段)设置适配器时,确保调用 getBaseContext
作为上下文参数:
yourAdapter = new YourAdapter(userIDArr, profileIDArr, ... getBaseContext());
yourRecyclerView.setAdapter(yourAdapter);