【问题标题】:Change navigationdrawer item language更改导航抽屉项目语言
【发布时间】:2015-12-11 06:23:26
【问题描述】:

在我的 android 应用程序中,我想更改语言表单片段。我的应用程序包含 MainActivity.java。此活动包含导航抽屉和片段。当我从片段更改语言环境时,语言在每个地方都发生了变化,但不是在导航抽屉中。我正在使用代码

private String setLocal() {
    Locale locale;
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    prefs = getActivity().getSharedPreferences("Language", 0);
    String restoredText = prefs.getString("language", "");
    if (restoredText.equalsIgnoreCase("fr_FR"))
        locale = new Locale("fr");

    else
        locale = new Locale("en");
    Locale.setDefault(locale);
    conf = new Configuration();
    res.updateConfiguration(conf, dm);

    return restoredText;
}

当我选择英语时,我得到以下结果

更改语言后我得到了这个

这是 values-fr 目录中的字符串文件

 <string-array name="nav_drawer_titles">
    <item>Accueil</item>
    <item>Profil</item>
    <item>courses</item>
    <item>Tarification</item>
    <item>Configuration</item>
    <item>Envoyez à un ami</item>
    <item>Facture</item>
    <item>Position du Chaufeur</item>
    <item>Aide</item>
    <item>Déconnexion</item>
</string-array>

这里来自 values 文件夹

 <!-- Nav Drawer Menu Items -->
<string-array name="nav_drawer_titles">
    <item>Home</item>
    <item>Profile</item>
    <item>Ride Log</item>
    <item>Invoice</item>
    <item>Track Chauffeur</item>
    <item>Language</item>
    <item>Refer To Friend</item>
    <item>Help</item>
    <item>Sign Out</item>
</string-array>

我的 navigationdrawerfragnet 是

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    title = getResources().getStringArray(R.array.nav_drawer_titles);

    images = getResources().getStringArray(R.array.nav_drawer_icons);


    mDrawerListView = (ListView) inflater.inflate(
            R.layout.fragment_navigation_drawer, container, false);


    mDrawerListView
            .setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    selectItem(position);
                }
            });
    selectedposition = new int[] { mCurrentSelectedPosition };
    drawerAdapter = new CustomDrawerAdapter(getActivity(), title, images,
            selectedposition);

    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
    mDrawerListView.setAdapter(drawerAdapter);
    return mDrawerListView;
}

我是 MainActivity.java

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    super.onPrepareOptionsMenu(menu);
    invalidateOptionsMenu();
    setLocal();
    return super.onPrepareOptionsMenu(menu);
}
@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    setLocal();
    invalidateOptionsMenu();
}

【问题讨论】:

  • 您应该更改包含您的菜单抽屉的活动。
  • 好的,我在主要活动上更改它但没有得到期望的结果
  • 我认为你的 menudrawer 项目的字符串也应该在 strings.xml 中,它们在里面吗?
  • 在所有其他的工作正常吗?
  • @piyush 是的,在其他片段和活动中运行良好

标签: android navigation-drawer


【解决方案1】:

你应该在setContentView(int resId)之前在你的抽屉活动中设置你的语言环境。

同样在onResume() 方法中,您可以使用API_LEVEL &gt;= 11 重新创建您的活动 拨打super.recreate()及以下11可以设置onCreate(null)

【讨论】:

  • 在主要活动或导航抽屉片段中我正在使用 api 级别 11
  • @RahulPatel 你检查了吗?
  • 是的,请查看我更新的问题,但无法更改
【解决方案2】:

检查this

title = getResources().getStringArray(R.array.nav_drawer_titles);

images = getResources().getStringArray(R.array.nav_drawer_icons);

   mDrawerListView
        .setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                selectItem(position);
            }
        });
selectedposition = new int[] { mCurrentSelectedPosition };
drawerAdapter = new CustomDrawerAdapter(getActivity(), title, images,
        selectedposition);

mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
mDrawerListView.setAdapter(drawerAdapter);

你需要在你的 setLocal 方法上推那里的行来使抽屉列表无效

【讨论】:

  • 您需要使您的抽屉适配器无效才能更新字符串数组。只需将上面的行复制到您的 setLocal 方法
  • 在导航抽屉片段中
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多