SORU
15 ŞUBAT 2010, PAZARTESİ


App içinde değişen Yerel

Benim kullanıcı uygulaması içinde Yerel (İngilizce Telefon ayarları tutmak ama Fransızca benim app, Hollanda veya başka bir dil içeriğini okumak isteyebilirsiniz...) değiştirebilirsiniz

Neden bu mükemmel 1.5/1.6 iyi ama 2.0 DEĞİL artık çalışıyor ???

@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...

Sorun MENÜ "" daha fazla ve daha fazla her kullanıcı satır kod sayesinde, yukarıda.. küçülür

Bu daralmış alır Menüsü:

@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);
}

Ben API Seviye 5'te tekrar çalışması için ne yapmalıyım ?

BURADA İSE BU TEST ETMEK İSTİYORSANIZ, TAM KODU :

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);
    }
}

VE İŞTE ORTAYA :

<?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>

BU NE BULDUM

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

=>GAYET GÜZEL ÇALIŞIYOR ...

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

=>Menü küçülür yerel değişim her zaman !!!

başvurum 1.5, ne yapmalıyım ?? kullanıcılar için erişilebilir olmasını istediğim gibi

CEVAP
21 Kasım 2010, Pazar


Asıl soruya tam olarak yerel kendisi hakkında değil, tüm diğer yerel ile ilgili sorular bu bir referans. Bu konuya burada açıklık getirmek istedim. Kendi yerel kod geçiş için bir başlangıç noktası olarak bu soruyu kullandım ve bu yöntem tam olarak doğru olmadığını öğrendim. Çalışır, ama belirli bir aktivitede herhangi bir yapılandırma değişikliği (örneğin ekran döndürme) kadar sadece ve sadece. Aşağıdaki yaklaşım ile sona erdi ben bir süre için bir kod ile oynamak:

Genişletilmiş android var.app.Uygulama ve ekledi:

public class MyApplication extends Application
{
    private Locale locale = null;

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        if (locale != null)
        {
            newConfig.locale = locale;
            Locale.setDefault(locale);
            getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
        }
    }

    @Override
    public void onCreate()
    {
        super.onCreate();

        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);

        Configuration config = getBaseContext().getResources().getConfiguration();

        String lang = settings.getString(getString(R.string.pref_locale), "");
        if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang))
        {
            locale = new Locale(lang);
            Locale.setDefault(locale);
            config.locale = locale;
            getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
        }
    }
}

Bu kodu her Faaliyet özel ayar ve sıfırlama olmayacaktır set rotasyon ve diğer olaylar olanağına sahip olur.

Ben de harcanan bir sürü zaman kazanmaya çalışıyorum tercihini değiştirmek için uygulanan hemen ama olmadı başarılı: dil değişti doğru Etkinliği yeniden, ama sayı biçimleri ve diğer yerel özellikleri değildi uygulanan kadar tam uygulamasını yeniden başlatın.

UYARI: AndroidManifest her aktivite için android:configChanges="layoutDirection|locale" eklemeyi unutma. İşe yaramıyor bu yöntem ve bu değişiklik olmadan çalıştım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • MrOctopi

    MrOctopi

    6 Aralık 2010
  • super1988guy

    super1988guy

    9 Aralık 2007