2013-08-09 2 views
2

세 가지 활동이 있습니다. 주요 활동, 설정 활동 및 설정 활동작업 막대 제목이 작업 다시 생성 후 사라집니다.

주 열기 설정을 여는 설정입니다.

는 설치 작업에서는 내가 된 SharedPreferences

홈페이지 및 설정에

내가 SharedPreference 변경에 대한 리스너가에 저장 한 사용자의 언어 변경을 할 수 있습니다.

변경 후이 활동을 다시 만듭니다 (주 및 설정). 모든 텍스트가 새로운 언어로 표시되지만 작업 표시 줄 제목이 사라지고 올바른 언어로만 나타납니다. setTitle을 사용하여 제목을 설정하는 것은 작동하지 않으며 getTitle은 올바른 텍스트를 반환합니다. 그것은 단지 보이지 않습니다.

장치를 회전시키지 않고 ActionBar 제목을 강제로 표시하는 방법에 대한 아이디어가 있습니까? 언어 클래스에서

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    ctx = getBaseContext(); 

    Language.loadLocale(ctx); 
    setContentView(R.layout.activity_main); 
    act = this; 
    // Set up the action bar. 
    final ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 


    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 


    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      actionBar.setSelectedNavigationItem(position); 
      activeTab = position; 
     } 
    }); 


    actionBar.addTab(
      actionBar.newTab() 
        .setText(R.string.title_tab1_active_order_name) 
        .setTabListener(this)); 

    actionBar.addTab(
      actionBar.newTab() 
        .setText(R.string.title_tab2_history_name) 
        .setTabListener(this)); 

    actionBar.addTab(
      actionBar.newTab() 
        .setText(R.string.title_tab3_tools_name) 
        .setTabListener(this)); 

    listenOnLangChange(); 


} 

private void listenOnLangChange(){ 
    //handles language changes 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
      // Implementation 
      if (key.equals("setLanguageKey")){ 
       Configuration config = Language.loadLocale(ctx); 
       onConfigurationChanged(config); 
      } 
     } 
    }; 

    prefs.registerOnSharedPreferenceChangeListener(listener); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    act.recreate(); 
} 

: 나는 사용자 정의보기에 그것을 해결했다

public static Configuration changeLang(String lang, Context ctx) 
{ 

    String languageToLoad = lang; // your language 
    Locale locale = new Locale(languageToLoad); 

    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 

    ctx.getResources().updateConfiguration(config, 
      ctx.getResources().getDisplayMetrics()); 

    Log.d("CHANGE", languageToLoad); 

    return config; 
} 


public static Configuration loadLocale(Context ctx) 
{ 
    String langPref = "setLanguageKey"; 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); 
    String language = prefs.getString(langPref, ""); 
    Log.d("LOAD", language); 

    return changeLang(language, ctx); 
} 
+0

'android : showAsAction = "always"'xml에 넣을 수 있습니까? – g00dy

+0

onCreate()를 게시 할 수 있습니까? 보기를 구축하는 데 문제가있는 것처럼 느껴집니다. – bofredo

+0

showAsAction = "always"인 세 가지 항목이있는 메뉴가 있습니다. 이들은 새로운 언어로 정확하게 업데이트됩니다. 불행히도 사라지는 제목 일뿐입니다. –

답변

1

은 작업 표시 줄에 추가됩니다. 그것은 작동하지만 어쩌면 최선의 해결책은 아닙니다.

public static void setActionbarTitle(Activity act, String title){ 
    ActionBar actionBar = act.getActionBar(); 

    actionBar.setDisplayShowCustomEnabled(true); 
    actionBar.setDisplayShowTitleEnabled(false); 

    LayoutInflater inflator = (LayoutInflater) act.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflator.inflate(R.layout.actionbar_title_layout, null); 

    TextView tv = (TextView) v.findViewById(R.id.tv_actionbar_title); 
    tv.setText(title); 
    tv.setTextColor(Color.WHITE); 

    actionBar.setCustomView(v); 
} 
관련 문제