1

現在、Android プロジェクトに取り組んでいます。言語を英語からスペイン語に変更できるボタンを実装しようとしています。これは私のコードです:

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

    //As soon as app is started up create an order object.
    order = new Order();
    order.setCovers(2);
    order.setTable(1);
    order.addToOrder(new MenuItem("Item 1", 12.99));
    Toast.makeText(getApplicationContext(), "order size: " + order.getItems().size(), Toast.LENGTH_SHORT).show();


    //reference to button and add listeners
    orderBtn = (Button)findViewById(R.id.orderBtn);
    orderBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Create a new intent and start up the sections activity...
            i = new Intent(v.getContext(), SectionsActivity.class);
            i.putExtra("data", order);
            startActivity(i);
        }
    });



spanishBtn = (Button)findViewById(R.id.spanishBtn);
spanishBtn.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Locale locale = new Locale("es");
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale; 
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

    }
});

}

ボタンは言語を変更しません。それは英語のままです。ただし、アクティビティの上部にあるこのコードを使用してプロジェクトを実行すると、スペイン語のテキストが読み込まれます。

Locale locale = new Locale("es");
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

私は何を間違っていますか?どんなアドバイスでも大歓迎です。上記のコードから達成したいことは、アプリが英語で起動し、values-en フォルダーから文字列値を取得することです。次に、ボタンをクリックすると、values-es フォルダーから文字列値が読み込まれます。

リスナーを次のように変更します。

    spanishBtn = (Button)findViewById(R.id.spanishBtn);
spanishBtn.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Locale locale = new Locale("es");
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale; 
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
        MainActivity.this.setContentView(R.layout.activity_main);

    }
});

まだ動作していません...

4

1 に答える 1

1

最善の方法は、既定のロケールを設定した後にアクティビティを再読み込みすることです。したがって、コードを次のように変更します。

spanishBtn = (Button)findViewById(R.id.spanishBtn);
spanishBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    Locale locale = new Locale("es");
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Intent i = new Intent(v.getContext(), YourActivityName.class);
   startActivity(i);
}
});

これにより、デフォルト言語がスペイン語に設定されたアクティビティがリロードされます。

于 2013-02-20T18:42:06.850 に答える