2015-05-08 21 views
5

uygulamamda iki etkinliğe biri her iki tarafa döndürülebilir ve diğeri yatay modda kilitleniyor.Oryantasyonda android yerel ayar değişikliği

takiben faaliyetler i yerel ayarını değiştirerek ve tüm düzenleme metinleri ve düğmeler metni güncelleştiriyorum bir eğiren kullanarak benim giriş aktivitesinde

<activity 
    android:name="com.hogaming.android.Activities.LoginActivity" 
    android:configChanges="orientation|screenSize|keyboardHidden"> 
</activity> 

<activity 
    android:name="com.android.activities.MainActivity" 
    android:configChanges="orientation|screenSize|keyboardHidden"> 
</activity> 

eklenmiştir benim bildirim dosyası detay. i Burada güncellenen seni doğru anladıysam benim tüm kod

public class LoginActivity extends Activity 
{ 
    Locale locale = null; 
    Spinner langSpinner; 
    private SharedPreferences langPrefs; 
    String langSelected = ""; 
    int langPosition = 0; 

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

     langPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
     langSelected = langPrefs.getString(langPrefKey, ""); 
     langPosition = langPrefs.getInt(langPosKey, 0); 

     langSpinner = (Spinner)this.findViewById(R.id.lanuage_spinner1); 
     langSpinner.setSelection(langPosition); 
     langSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
     { 
      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long arg3) 
      { 
       if (pos == 0) 
       { 
        langSelected ="en"; 
        locale = Locale.ENGLISH; 
       } 
       else if (pos == 1) 
       { 
        langSelected ="it"; 
        locale = Locale.ITALIAN; 
       } 
       else if (pos == 2) 
       { 
        langSelected ="zh"; 
        locale = Locale.SIMPLIFIED_CHINESE; 
       }    
       else if (pos == 3) 
       { 
        langSelected ="zh-rTW"; 
        locale = Locale.TRADITIONAL_CHINESE; 
       } 
       changeLang(langSelected, pos); 
      } 
      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

     btnLogin = (Button) this.findViewById(R.id.LoginButton); 
     btnLogin.setOnClickListener(new ButtonClickListener()); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     this.finish(); 
    } 

    @Override 
    protected void onDestroy() 
    { 
     super.onDestroy(); 
     this.finish(); 
    } 

    public class ButtonClickListener implements OnClickListener { 
     public void onClick(View v) { 
        final LoginTask validateTask = new LoginTask(context, usernameField.getText().toString(), passwordField.getText().toString()); 
        validateTask.execute(); 
       } 

       // Hide the keyboard 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(passwordField.getWindowToken(), 0); 
    } 

    public class LoginTask extends AsyncTask<Void, Void, String> 
    { 
     protected LoginActivity context; 
     protected Exception exception; 
     private String username; 
     private String password; 

     public LoginTask(LoginActivity context, String uname, String pwd) { 
      this.context = context; 
      this.username = uname; 
      this.password = pwd; 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      try 
      { 
       return HTTPHelper.LoginTaskData(this.context, username, password); 
      } 
      catch (Exception e) 
      { 
       exception = e; 
       Log.e(TAG, "Login Task Error", e); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) 
     { 
      super.onPostExecute(result); 
      Log.e(TAG, "LoginTask: " + result); 
      if (result.equals("true")) 
      { 
       // moves to next activity 
      } 
      else if (result.equals("false")) 
      { 
       //showing an alert textview with selected language text 
      } 
     } 
    } 

    public void changeLang(String lang, int pos) 
    { 
     if (lang.length() != 0) 
     {  
      saveLocale(lang, pos, locale); 
      android.content.res.Configuration config = new android.content.res.Configuration(); 
      config.locale = locale; 
      Locale.setDefault(locale); 
      getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
      updateTexts(); 
     } 
    } 

    public void saveLocale(String lang, int pos, Locale locale) 
    { 
     SharedPreferences.Editor editor1 = langPrefs.edit(); 
     editor1.remove(langPrefKey); 
     editor1.remove(langPosKey); 
     editor1.commit(); 

     SharedPreferences.Editor editor = langPrefs.edit(); 
     editor.putString(langPrefKey, lang); 
     editor.putInt(langPosKey, pos); 
     editor.commit(); 

     langSelected = langPrefs.getString(langPrefKey, ""); 
     langPosition = langPrefs.getInt(langPosKey, 0); 
    } 

    private void updateTexts() 
    { 
     // here i will once again set all textview String values, it changes to the selected language 
    } 

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

Hangi Android İşletim Sistemini kullanıyorsunuz? – Mithun

+0

android kitkat ve lollypop –

cevap

3

yerinin yanı sıra, ingilizce yerel görünümlerde ayarlanır cihazı çevirdiğinizde bir düğme tıklama eylem olarak i o zaman UI görüşlerini güncellenmesi ve am Sorun, AndroidManifest.xml ürününüzde android:configChanges="orientation|screenSize|keyboardHidden"'a rağmen ekran yönünü değiştirdiğinizde telefonun yerel ayarının geri yüklenebilmesidir. Eğer içinde olsaydım, konuya farklı bir bakış açısıyla yaklaşırdım. Yönlendirme değiştiğinde, Android'in Aktiviteyi yeniden başlatarak işini yapmasına izin vererek android:configChanges'dan kurtulurdum. Daha sonra onSaveInstanceState çiftini kaydetmek ve Spinner'da seçilen kullanıcıyı kullanırdım. onCreate yeniden çağrıldığında ve paket boş olmadığı için yönlendirme değişikliği nedeniyle çağrıldığını biliyorsanız, saklanan ve yeniden başlat Locale okuyun ve yapılandırmayı yeniden güncelleştirin. Örneğin.

<activity 
    android:name="Your_Activity" 
    android:configChanges="orientation" 
    android:screenOrientation="landscape" /> 
1

ben manifest dosyasında belirli aktivitenin sabit oryantasyon zaman kodu aşağıdaki koymak gerektiğini düşünüyorum. Sadece kayıtlı yerel ayarı ayarlayın. onCreate yılında:

... 
    langPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
    langSelected = langPrefs.getString(langPrefKey, ""); 
    langPosition = langPrefs.getInt(langPosKey, 0); 

    // JUST ADD THIS LINE HERE 
    changeLang(langSelected, langPosition); 
    // no need to check empty langSelected, it handled inside of changeLang as you write. 

    langSpinner = (Spinner)this.findViewById(R.id.lanuage_spinner1); 
    .... 

belki android:configChanges ve ilgili yöntemini kaldırmak gerekir.

+0

aynı şeyi denedim ama kullanmadım –

1

Hala çözüm vardır:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putSerializable("LOCALE", locale); 
    super.onSaveInstanceState(savedInstanceState); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.loginscreen); 
    if (savedInstanceState != null) { 
     locale = (Locale) savedInstanceState.getSerializable("LOCALE"); 
     if (locale != null) { 
      // update the configuration 
     } 
    }