Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android studio应用程序中的多语言更改_Java_Android_Android Studio - Fatal编程技术网

Java android studio应用程序中的多语言更改

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.

我正在做一个项目,我需要有一些设置,用户可以选择那里的语言

当我使用旧版本的材料设计库时,它工作得很好 但是如果我想将依赖项更改为androidX(AndroidV30) 它不起作用

这意味着如果我使用

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()传递给配置

我希望为你工作:)