2016-10-18 3 views
0

Bitte ändern helfen,Wie die Sprache mit einem Knopf im Android Studio

Ich habe zwei zusätzlich Sprachressource erstellt und mag dem Spiel die Möglichkeit geben, die Sprachoption mit einer Taste Auswahl zu ändern.

Ich habe eine Klasse namens LocaleHelper erstellt, die ich über Google gefunden habe, wie unten, aber das Gebietsschema wurde seither entzogen. Wie geht es jetzt?

LocaleHelper.onCreate(this, "en"); 

Fehler wie folgt:: aber meine APP Werke denkt nicht diese optimal ist

package biz.myecard.mathisfun; 

/** 
* Created by Hans Fouche on 2016/10/18. 
*/ 

import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.res.Configuration; 
import android.content.res.Resources; 
import android.preference.PreferenceManager; 

import java.util.Locale; 

public class LocaleHelper { 

    private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language"; 

    public static void onCreate(Context context) { 
     String lang = getPersistedData(context, Locale.getDefault().getLanguage()); 
     setLocale(context, lang); 
    } 

    public static void onCreate(Context context, String defaultLanguage) { 
     String lang = getPersistedData(context, defaultLanguage); 
     setLocale(context, lang); 
    } 

    public static String getLanguage(Context context) { 
     return getPersistedData(context, Locale.getDefault().getLanguage()); 
    } 

    public static void setLocale(Context context, String language) { 
     persist(context, language); 
     updateResources(context, language); 
    } 

    private static String getPersistedData(Context context, String defaultLanguage) { 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
     return preferences.getString(SELECTED_LANGUAGE, defaultLanguage); 
    } 

    private static void persist(Context context, String language) { 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
     SharedPreferences.Editor editor = preferences.edit(); 

     editor.putString(SELECTED_LANGUAGE, language); 
     editor.apply(); 
    } 

    private static void updateResources(Context context, String language) { 
     Locale locale = new Locale(language); 
     Locale.setDefault(locale); 

     Resources resources = context.getResources(); 

     Configuration configuration = resources.getConfiguration(); 
     configuration.locale = locale; 

     resources.updateConfiguration(configuration, resources.getDisplayMetrics()); 
    } 
} 

Es wird die in die Schaltfläche Methode mit aufgerufen.

Hinweis: /Users/macintoshhd/Desktop/AndroidCourse/MathisFun/app/src/main/java/biz/meinecard/mathisfun/LocaleHelper.java verwendet oder überschreibt eine veraltete API. Hinweis: Erneutes Kompilieren mit -Xlint: Veraltet für Details.

+0

Das ist nicht ein Fehler ist, nur eine deprecation Warnung –

+0

Danke, aber Weißt du, was der neue und korrekte (optimale) Weg ist? –

+0

Es ist nicht klar, welche Methode Ihnen diese Warnung gibt. –

Antwort

1

Sie sollten zunächst java doc lesen:

Dieses Feld in API-Ebene weiterentwickelt wurde 24. Diese Mitteilung nicht direkt eingestellt oder gelesen werden. Verwenden Sie getLocales() und setLocales (LocaleList). Wenn nur das primäre Gebietsschema benötigt wird, ist getLocales(). Get (0) jetzt der bevorzugte Zugriffsmechanismus.

So sind Sie so tun können:

private static void updateResources(Context context, String language) { 
    Locale locale = new Locale(language); 
    Locale.setDefault(locale); 

    Resources resources = context.getResources(); 

    Configuration configuration = resources.getConfiguration(); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     configuration.setLocale(locale); 
    } else { 
     configuration.locale = locale; 
    } 

    resources.updateConfiguration(configuration, resources.getDisplayMetrics()); 
} 

Deprecation bedeutet, dass Verfahren nicht unterstützt wird zur Zeit und könnte in der nächsten Versionen von api entfernt werden. Aber in den vorherigen können Sie nicht vermeiden, es zu benutzen, weil es keine neue Methoden waren (Setter & Getter, die seit 17 & 21 api zur Verfügung gestellt wurden)

+0

Danke das möchte ich aber verwenden wenn ich diesen Code in meinem onCreate nur zum Testen hinzufüge, bevor ich zu einer Schaltfläche oder Einstellungen hinzufüge die Konfiguration nicht erkannt wird. –

+0

@HansFouche bedeutet, dass Sie dieses Snippet in Ihrer 'updateResources' Methode verwenden sollten. Siehe aktualisierte Antwort – Beloo

+0

Danke, will nicht blöd klingen, ziemlich neu. Ich sehe, ich muss eine Methode erstellen und aufrufen wie: updateResources (???, "es"), was ich im Kontext übergeben. Dieser Code würde auch meine LocaleHelper-Klasse ersetzen? –

Verwandte Themen