Gebietsschema in der App selbst ändern

Mein Benutzer können ändern Sie die Locale innerhalb der app (können Sie möchten, um Ihre Handy-Einstellungen in Englisch, aber das Lesen der Inhalte meiner app in Französisch, Niederländisch oder in einer anderen Sprache ...)

Warum ist diese Arbeit völlig in Ordnung, in 1.5/1.6, aber NICHT in der 2.0 nicht mehr ???

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case 201:
        Locale locale2 = new Locale("fr"); 
        Locale.setDefault(locale2);
        Configuration config2 = new Configuration();
        config2.locale = locale2;
        getBaseContext().getResources().updateConfiguration(
            config2, getBaseContext().getResources().getDisplayMetrics());
        //loading data ...
        refresh();
        //refresh the tabs and their content
        refresh_Tab ();   
     break;
     case 201: etc...

Das problem ist, dass das MENÜ "schrumpft" mehr und mehr jedes mal wenn sich der Benutzer durch die Zeilen code oben ...

Dies ist das Menü, das bekommt geschrumpft:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, 100, 1, "REFRESH").setIcon(android.R.drawable.ic_menu_compass);
    SubMenu langMenu = menu.addSubMenu(0, 200, 2, "NL-FR").setIcon(android.R.drawable.ic_menu_rotate);
        langMenu.add(1, 201, 0, "Nederlands");
        langMenu.add(1, 202, 0, "Français");
    menu.add(0, 250, 4, R.string.OptionMenu2).setIcon(android.R.drawable.ic_menu_send);
    menu.add(0, 300, 5, R.string.OptionMenu3).setIcon(android.R.drawable.ic_menu_preferences);
    menu.add(0, 350, 3, R.string.OptionMenu4).setIcon(android.R.drawable.ic_menu_more);
    menu.add(0, 400, 6, "Exit").setIcon(android.R.drawable.ic_menu_delete);

    return super.onCreateOptionsMenu(menu);
}

Was soll ich tun, in der API-Level von 5 um diese wieder funktionieren???

HIER IST DER VOLLSTÄNDIGE CODE, FALLS SIE DAS TESTEN WOLLEN :

import java.util.Locale;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class Main extends Activity {
    /** Called when the activity is first created. */


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        SubMenu langMenu = menu.addSubMenu(0, 200, 2, "NL-FR").setIcon(android.R.drawable.ic_menu_rotate);
            langMenu.add(1, 201, 0, "Nederlands");
            langMenu.add(1, 202, 0, "Français");

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){

        case 201:

            Locale locale = new Locale("nl"); 
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
            Toast.makeText(this, "Locale in Nederlands !", Toast.LENGTH_LONG).show();
            break;

        case 202:

            Locale locale2 = new Locale("fr"); 
            Locale.setDefault(locale2);
            Configuration config2 = new Configuration();
            config2.locale = locale2;
            getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());

            Toast.makeText(this, "Locale en Français !", Toast.LENGTH_LONG).show();
            break;  

        }
        return super.onOptionsItemSelected(item);
    }
}

UND HIER IST DAS MANIFEST :

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.cousinHub.ChangeLocale"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".Main"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
        <uses-sdk android:minSdkVersion="3" /> 
    </manifest>

DIES IST, WAS ICH GEFUNDEN HABE :

<uses-sdk android:minSdkVersion="5" />

=> ES FUNKTIONIERT Prima ...

<uses-sdk android:minSdkVersion="3" />

=> Menü schrumpft jedes mal, wenn Sie ändern Sie die locale !!!

wie ich will, um meine Anwendung für die Nutzer zugänglich auf 1.5, was soll ich tun ??

Kommentar zu dem Problem
Was meinst du mit "verkleinert"? Kommentarautor: CommonsWare
es wird kleiner und kleiner jedes mal. sollte ich vielleicht auch etwas anderes verwenden als getBaseContext ? Kommentarautor: Hubert
Vielleicht ist es nicht diese Linien, die ein problem als wenn ich eine sehr einfache app, die gerade die Veränderung in der Locale, ich habe nicht die gleichen "Schrumpfung des Menü". Ich dachte, es sei vielleicht, weil meine Aktivität war in der Tat eine TabActivity, aber auch mit, dass ich nicht neu erstellen können, das problem. Ich werde das weiter untersuchen, was ist die genaue Ursache für diesen Fehler... Suche nicht weiter danach. Ich poste die Antwort dann hier, wenn ich es finde. Cheers, H. Kommentarautor: Hubert
Ich bearbeitete meinen ersten post, gibt ein Beispiel, wie man das problem. Und ich bemerkte, in der Tat, dass, wenn ich ändern Sie die Zeile <uses-sdk android:minSdkVersion="5" /> "3" ... in der Tat scheint das problem ! Kommentarautor: Hubert
Sie können den folgenden library stellt die Liste "Sprache", die Vorliebe für Ihre Bildschirm Einstellungen, und überschreibt die Sprache in Ihrer Anwendung: github.com/delight-im/Android-Languages Kommentarautor: caw

InformationsquelleAutor der Frage Hubert | 2010-02-15

Schreibe einen Kommentar