Java android studio应用程序中的多语言更改
我正在做一个项目,我需要有一些设置,用户可以选择那里的语言 当我使用旧版本的材料设计库时,它工作得很好 但是如果我想将依赖项更改为androidX(AndroidV30) 它不起作用 这意味着如果我使用Java android studio应用程序中的多语言更改,java,android,android-studio,Java,Android,Android Studio,我正在做一个项目,我需要有一些设置,用户可以选择那里的语言 当我使用旧版本的材料设计库时,它工作得很好 但是如果我想将依赖项更改为androidX(AndroidV30) 它不起作用 这意味着如果我使用 import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import androidx.appcompat.app.ActionBar; import androidx.
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
它工作,但如果我使用
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
它不起作用
不工作意味着(应用程序将启动,但无法正常工作)
我的主要活动是
package com.faranesh.saman.multilanguage2020;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LoadLocale();
setContentView(R.layout.activity_main);
ActionBar actionBar=getSupportActionBar();
actionBar.setTitle(getResources().getString(R.string.app_name));
btn=(Button)findViewById(R.id.btn_chang_language);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChangeLanguageState();
}
});
}
public void ChangeLanguageState(){
final String[] listItem=new String[]{"English","فارسی"};
AlertDialog.Builder dialog=new AlertDialog.Builder(this);
dialog.setTitle("Chosse one Language....");
dialog.setSingleChoiceItems(listItem, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which==0){
setLocale("en");
recreate();
}else if (which==1){
setLocale("fa");
recreate();
}
dialog.dismiss();
}
});
AlertDialog builder=dialog.create();
builder.show();
}
public void setLocale(String lang){
Locale locale=new Locale(lang);
Locale.setDefault(locale);
Configuration configuration=new Configuration();
configuration.locale=locale;
getBaseContext().getResources().updateConfiguration(configuration,getBaseContext().getResources().getDisplayMetrics());
SharedPreferences.Editor editor=getSharedPreferences("settings",MODE_PRIVATE).edit();
editor.putString("MY_LANG",lang);
editor.apply();
}
public void LoadLocale(){
SharedPreferences sharepref=getSharedPreferences("settings",Activity.MODE_PRIVATE);
String language=sharepref.getString("MY_LANG","");
setLocale(language);
}
}
在setContentView之前,应该一起调用setLocal和LoadLocal函数。如下代码所示:
private void changeLanguage(String language) {
sharedPreferences.edit().putString(Constant.LANGUAGE_KEY, language).apply();
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration configuration = new
Configuration(getResources().getConfiguration());
configuration.setLayoutDirection(locale);
configuration.locale = locale;
configuration.setLocale(locale);
getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
getResources().getConfiguration().setLocale(locale);
}
并将getResources().getConfiguration()传递给配置
我希望为你工作:)