android - 如何在 Android 中单击 ImageView 更改我的 Android 应用程序中的语言
问题描述
我正在创建一个简单的应用程序,该应用程序需要在单击工具栏中的图像视图时更改语言。该应用程序实际上带有导航抽屉内的选项卡布局。我正在为自己的母语(泰米尔语)使用另一种语言(语言环境)。
如果用户单击工具栏中的 imageView,应用程序的语言应该从英语变为泰米尔语。但是当我单击 imageView 时,应用程序的语言没有改变。因为我已经在字符串文件中创建了另一个语言环境。我不知道为什么语言没有改变。
MainActivity.java:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
ImageView imageView;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
imageView = (ImageView)findViewById(R.id.imageView);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String languageToLoad = "ta_IN";
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,context.getResources().getDisplayMetrics());
Toast.makeText(getApplicationContext(),"Language changed",Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivity.this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//it will recreate it self with new language.
startActivity(intent);
}
});
TabLayout tabLayout =(TabLayout)findViewById(R.id.tabs);
ViewPager Pager =(ViewPager)findViewById(R.id.viewpager);
tabpagerAdapter Tabpageradapter = new tabpagerAdapter(getSupportFragmentManager());
Pager.setAdapter(Tabpageradapter);
tabLayout.setupWithViewPager(Pager);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camera) {
// Handle the camera action
} else if (id == R.id.nav_gallery) {
} else if (id == R.id.nav_slideshow) {
} else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
} else if (id == R.id.nav_send) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
解决方案
应用区域设置更改后,尝试调用activity.recreate()
. 这将允许使用新实例重新创建活动。你可以在这里查看文档
将您的代码替换startactivity()
为recreate()
推荐阅读
- python - 在 Python 中使用来自 .env Laravel 的数据
- excel - 使用 Vlookup 进行条件匹配
- android - 我在构建 apk 并安装时有一个关于在颤振中使用 Shared_Preferences 的问题
- android - 如何仅打印 json 映射中值的特定部分?
- java - 平台/框架/基础是如何构建的?AOSP 源
- arrays - AngularJS 计算数组中匹配的次数
- reactjs - React 路由器渲染无效组件然后渲染有效组件
- vba - 如何使用 vba 遍历文档中的所有段落
- eclipse - 如何在 nattable 中按列标题层分组实现文本换行
- mongodb - 如何在 MongoDB Ops Manager 中从故障状态中恢复