3

Android アプリで言語設定 (英語、繁体字中国語、簡体字中国語) を提供しようとしていますが、言語設定が変更されても、アプリには変更がなく、同じ言語が表示されます。同様の質問をstackoverflowで参照しましたが、問題がどこにあるのかまだわかりません。エラーを見つけるための助けを求めたいと思います。手伝ってくれてどうもありがとう!

public class AppPrefActivity extends Activity {

private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
SharedPreferences pref;

public static final String PREF_LANGUAGE = "language_pref";

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement()).commit();

 }

public static class PrefsFragement extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preference);
    }

    @Override
    public void onResume() {
        super.onResume();
        getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        super.onPause();
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if(key.equals(PREF_LANGUAGE))
        {
            Preference connectionPref = findPreference(key);
            connectionPref.setSummary(sharedPreferences.getString(key, ""));
            changeLanguagePref(sharedPreferences.getString(key, ""));
        }
    }

            private void changeLanguagePref(Context context, String lang){
        Locale locale = null;
        if (lang.equals("Traditional Chinese")){
            locale = new Locale("zh");//("zh_rTW");
        }else if (lang.equals("Simplified Chinese")){
            locale = new Locale("zh");//("zh_rCN");
        }else{
            locale = new Locale("en");
        }
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        context.getResources().updateConfiguration(config, null);
    }

}

}

AndroidManifest.xml

                <activity
        android:name=".AppPrefActivity"
        android:label="AppPrefActivity"
        android:configChanges="locale">
        <intent-filter>
            <action android:name="com.proj.george.betslog.AppPrefActivity" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

プリファレンス配列の設定

<string-array name="app_language">
    <item>Traditional Chinese</item>
    <item>Simplified Chinese</item>
    <item>English</item>
</string-array>
4

1 に答える 1

2

次の 2 つのことを行う必要があります。

  1. マニフェストに以下を追加します。

    Android:configChanges="ロケール"

  2. ユーザーが言語を変更する設定画面で 1 つのメソッドを作成します。

    public static void updateLanguage(Context context, String selectedLanguage) {
       if (!"".equals(selectedLanguage)) {
          if ("English".equals(selectedLanguage)) {
              selectedLanguage = "en";
          } else if ("Traditional Chinese".equals(selectedLanguage)) {
              selectedLanguage = "zh";
          }
          Locale locale = new Locale(selectedLanguage);
          Locale.setDefault(locale);
          Configuration config = new Configuration();
          config.locale = locale;
          context.getResources().updateConfiguration(config, null);
       }
    }
    
于 2015-07-16T02:42:43.263 に答える