2017-12-07 17 views
1

私はこのコミュニティに新しいメンバーです。最初に私は誰にも言っています "こんにちは" ..... これは私の最初の質問です。これはアンドロイドアプリの開発に基づいています。 これは私の質問です。 私はまだ3つの複数の言語のために開発する必要があるアプリケーションでアンドロイドapplication.soを開発しています。アンドロイドアプリの言語をprogrammaticalllyに変更するには

1.English - "エン" 2.Chinese(簡体字) - "zh_" 3.Chinese(繁体字) - "のzh_TW"

だから私は、これらの言語の文字列リソースを追加し、私はコードを実装残念ながらそれはいくつかの時間は働いていませんが、それはしばらくの間働いています。私は自分のコードの間違いを特定することはできません。それは何の誤りもないようです。

これらは私のテストの文字列名(すべてlanuages)

  • で "エン" -sign "ZH _" である - 登录
  • "のzh_TW" - 登錄

と、この私のコード部分です

public class MainActivity extends AppCompatActivity { 

private Spinner spinnerctrl; 
private Locale myLocale; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    spinnerctrl=(Spinner)findViewById(R.id.spinner1); 

    spinnerctrl.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

     public void onItemSelected(AdapterView<?> parent, View view, 
            int pos, long id) { 

      if (pos == 1) { 

       Toast.makeText(parent.getContext(), 
         "You have selected Chinese(Simplified)", Toast.LENGTH_SHORT) 
         .show(); 
       saveLocale("zh"); 
      } else if (pos == 2) { 

       Toast.makeText(parent.getContext(), 
         "You have selected Chinese(Traditional)", Toast.LENGTH_SHORT) 
         .show(); 
       saveLocale("zh_TW"); 

      } 
      else if (pos == 3) 
      { 
       Toast.makeText(parent.getContext(), 
         "You have select English",Toast.LENGTH_SHORT) 
         .show(); 
       saveLocale("en"); 
      } 

     } 

     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 
     } 

    }); 

    loadLocale(); 

@Override 
public void onBackPressed() 
{ 
    Intent MyProfile = new Intent(getApplicationContext(), MainActivity.class); 
    startActivity(MyProfile); 
    finish(); 
} 

public void loadLocale() { 
    String langPref = "Language"; 
    SharedPreferences prefs = getSharedPreferences("CommonPrefs", 
      Activity.MODE_PRIVATE); 
    String language = prefs.getString(langPref, ""); 
    changeLang(language); 
} 

public void changeLang(String lang) { 
    if (lang.equals("")) 
     return; 
    myLocale = new Locale(lang); 
    saveLocale(lang); 
    Locale.setDefault(myLocale); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
} 

public void saveLocale(String lang) { 
    String langPref = "Language"; 
    SharedPreferences prefs = getSharedPreferences("CommonPrefs", 
      Activity.MODE_PRIVATE); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString(langPref, lang); 
    editor.commit(); 

}} 

これは私のprobですlem.thisコード部分はランタイムエラーなしで実行されます。しかし、いくつかの時間は働いていません.iはなぜそうなのかわかりません。だから私がこの問題をスローするのを助けることができれば、 ありがとうございます。

答えて

0
public static void changeLocale(Context context, String localeString) { 

String locale = "en"; 
if (localeString != null) { 
    if (localeString.equals("Malay")) { 
     locale = "ms"; 
    } else if (localeString.equals("Myanmar")) { 
     locale = "my"; 
    } else if (localeString.equals("Tamil")) { 
     locale = "ta"; 
    } 
} 

Locale myLocale = new Locale(locale); 
Resources res = context.getResources(); 
DisplayMetrics dm = res.getDisplayMetrics(); 

Configuration conf = res.getConfiguration(); 
conf.locale = myLocale; 
res.updateConfiguration(conf, dm); 

} 
+0

なぜコンテキストを有効にするのですか? – androidpc

+0

context.getResources(); //アプリケーションコンテキストからリソースを取得する必要があります。 –

関連する問題