Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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 在菜单中选择项目时如何更改本地语言?_Java_Android_Xml_Menu - Fatal编程技术网

Java 在菜单中选择项目时如何更改本地语言?

Java 在菜单中选择项目时如何更改本地语言?,java,android,xml,menu,Java,Android,Xml,Menu,我想通过按下按钮并从菜单中选择语言来更改语言,但我面临的问题是语言没有发生任何更改 注: 1-我有两个en和ar语言的字符串文件。 2-我有选项\u menu.xml: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-a

我想通过按下按钮并从菜单中选择语言来更改语言,但我面临的问题是语言没有发生任何更改 注: 1-我有两个en和ar语言的字符串文件。 2-我有选项\u menu.xml:

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/ar"
        android:title="عربي"/>
    <item android:id="@+id/en"
        android:title="English"/>
</menu>
3-Main_page.java包含:

public class main_page extends AppCompatActivity  {
private TextView name_nav;
private AppBarConfiguration mAppBarConfiguration;
private StorageReference mStorageRef;
private String uid;
private ImageView user_img;
private long backPressedTime;
private Toast backToast;
private DrawerLayout drawer;
FirebaseStorage storage;
StorageReference storageReference;
Button menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_page);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    mStorageRef = FirebaseStorage.getInstance().getReference();
    storage = FirebaseStorage.getInstance();
    storageReference = storage.getReference();
    uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    mAppBarConfiguration = new AppBarConfiguration.Builder(
            R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
            R.id.nav_tools, R.id.nav_share, R.id.nav_send)
            .setDrawerLayout(drawer)
            .build();
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);
    View header = navigationView.getHeaderView(0);
    name_nav = header.findViewById(R.id.name_nav);
    user_img = header.findViewById(R.id.user_img_nav);
    menu = header.findViewById(R.id.menu);
    TextView logout = navigationView.findViewById(R.id.logout);
    logout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FirebaseAuth.getInstance().signOut();
            SharedPreferences.Editor pref = getSharedPreferences("Login", MODE_PRIVATE).edit();
            pref.clear();
            pref.commit();
            Intent intent = new Intent(getApplicationContext(), PhoneLoginActivity.class);
            startActivity(intent);
            finish();
        }
    });
    ToggleButton logou_btnt = navigationView.findViewById(R.id.logout_btn);
    logou_btnt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FirebaseAuth.getInstance().signOut();
            SharedPreferences.Editor pref = getSharedPreferences("Login", MODE_PRIVATE).edit();
            pref.clear();
            pref.commit();
            Intent intent = new Intent(getApplicationContext(), PhoneLoginActivity.class);
            startActivity(intent);
            finish();
        }
    });
    loadInformation();
    registerForContextMenu(menu);
    menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            openContextMenu(view);
        }
    });
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.options_menu,menu);

}
@Override
public boolean onContextItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()){
        case R.id.ar:
            setLocale("ar");
        case R.id.en:
            setLocale("en");
        default:
            break;
    }
    return super.onContextItemSelected(item);
}
public void setLocale(String lang) {
    Locale myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);
    Intent refresh = new Intent(this, MainActivity.class);
    finish();
    startActivity(refresh);
}
public void loadInformation() {
    FirebaseDatabase.getInstance().getReference().child("Guest").child(uid)
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    System.out.println("fullName" + dataSnapshot.child("img_id").getValue(String.class));
                    name_nav.setText(dataSnapshot.child("fullName").getValue(String.class));
                }
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                }
            });
    StorageReference storageRef = storage.getReference();
    storageRef.child("images/"+uid).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
        @Override
        public void onSuccess(byte[] bytes) {
            // Use the bytes to display the image
            Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
            user_img.setImageBitmap(bmp);
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle any errors
            Toast.makeText(getApplicationContext(), "No Such file or Path found!!", Toast.LENGTH_LONG).show();
        }
    });
}
public void onBackPressed() {
    if (backPressedTime + 2000 > System.currentTimeMillis()) {
        backToast.cancel();
        finishAffinity();
    } else {
        backToast = Toast.makeText(getApplicationContext(), R.string.press_agin, Toast.LENGTH_SHORT);
        backToast.show();
    }
    backPressedTime = System.currentTimeMillis();
}
@Override
public boolean onSupportNavigateUp() {
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    return NavigationUI.navigateUp(navController, mAppBarConfiguration)
            || super.onSupportNavigateUp();
}}

运行结果:MainActivity仍然刷新,没有错误。

您可能想看看这个

TL;博士:

科特林 就业喜报
这回答了你的问题吗?
val config = resources.configuration
val locale = Locale("en")
Locale.setDefault(locale)
config.locale = locale
resources.updateConfiguration(config, resources.displayMetrics)
Configuration config = GetBaseContext().getResources().getConfiguration();
Locale locale = new Locale("en");
Locale.setDefault(locale);
config.locale = locale;
GetBaseContext().getResources().updateConfiguration(config, 
GetBaseContext().getResources().getDisplayMetrics());