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 ??
InformationsquelleAutor der Frage Hubert | 2010-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch die ursprüngliche Frage ist nicht genau über das locale selbst alle anderen locale-Fragen verweisen, auf dieser. Deshalb wollte ich zur Klärung der Frage hier. Ich habe diese Frage als Ausgangspunkt für meine eigenen, das Gebietsschema Umschalten der code und fand heraus, dass die Methode nicht ganz richtig ist. Es funktioniert, aber nur solange, bis jede änderung der Konfiguration (z.B. Bildschirm-rotation) und nur in dieser bestimmten Aktivität. Spielen mit einem code für eine Weile, ich landete mit dem folgenden Ansatz:
Habe ich erweitert android.app.Anwendung und folgenden code Hinzugefügt:
Dieser code wird sichergestellt, dass jede Aktivität wird über benutzerdefinierte Gebietsschema festgelegt und es wird nicht zurückgesetzt auf rotation und andere Veranstaltungen.
Habe ich auch viel Zeit damit verbracht, zu versuchen, um die Voreinstellung sofort angewendet werden, aber nicht erfolgreich: die Sprache korrekt geändert auf Aktivität starten, aber Zahlenformate und andere locale Eigenschaften wurden nicht angewendet, bis die volle Anwendung neu starten.
Änderungen
AndroidManifest.xml
Vergessen Sie nicht, fügen Sie
android:configChanges="layoutDirection|locale"
jede Aktivität im AndroidManifest, sowie dieandroid:name=".MyApplication"
zu den<application>
element.InformationsquelleAutor der Antwort Andrey Novikov
Nach einem guten Schlaf in der Nacht, fand ich die Antwort auf dem Web (eine einfache Google-Suche auf die folgende Zeile "
getBaseContext().getResources().updateConfiguration(mConfig, getBaseContext().getResources().getDisplayMetrics());
"), hier ist es :link-text
=> dieser link zeigt auch
screenshots
was passiert ist !Dichte war die Frage, die hier, die ich brauchte, um diese in die AndroidManifest.xml
Das wichtigste ist, die android:anyDensity =" true ".
Vergessen Sie nicht, fügen Sie den folgenden in der
AndroidManifest.xml
für jede Aktivität (für Android 4.1 und unten):Diese version wird benötigt, wenn Sie bauen für Android 4.2 (API level 17) Erklärung hier:
InformationsquelleAutor der Antwort Hubert
In Android M die top-Lösung wird nicht funktionieren. Ich habe eine schriftliche helper class zu beheben, die Sie von Ihrer Anwendung aus der Klasse und alle Aktivitäten (würde ich vorschlagen, die Schaffung eines BaseActivity und dann machen alle Aktivitäten, die von Ihr Erben.
Hinweis: Diese wird auch richtig RTL-layout-Richtung.
Helper-Klasse:
Anwendung:
BaseActivity:
InformationsquelleAutor der Antwort Roberto B.
Dies ist für mein Kommentar auf Andrey ' s beantworten, aber ich kann nicht fügen Sie code in die Kommentare.
Ist Sie Vorliebe Aktivität als die von dir genannte Haupttätigkeit? konnten Sie diese im Lebenslauf...
InformationsquelleAutor der Antwort trgraglia
Konnte ich nicht verwendet android:anyDensity="true", weil Objekte in mein Spiel wäre völlig anders positioniert... scheint dies auch funktioniert der trick:
InformationsquelleAutor der Antwort kape123
Wenn Sie möchten, um die Wirkung auf die Menü-Optionen für das ändern der Gebietsschema sofort.Sie haben zu tun, wie diese.
InformationsquelleAutor der Antwort Ramesh Akula