2013-11-27 2 views
0

내 앱 사용자에게 테마 옵션을 제공합니다. 그러나 회전 한 후에 테마가 다시 기본 테마로 재설정되는 것을 발견했습니다. 이 활동은 조각을 호스팅하는회전 후 Android 테마 재설정

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    config = PreferenceManager.getDefaultSharedPreferences(this); 
    theme = config.getString("theme", ""); 

    setActionBarTheme(theme); 
    setContentView(R.layout.main); 
} 

private void setActionBarTheme(String theme) 
{ 
    if(theme.equals("Holo Red")) 
    { 
     setTheme(R.style.onTime_Theme_Holo_Red); 
    }else 
    { 
     setTheme(R.style.onTime_Theme_Default); 
    } 
} 

장치가 회전 할 때, 조각이 남아 있지만 테마 재설정 : 다음은 내 코드입니다.

장치 구성이 변경되면 활동을 다시 만들어야합니다. 벌레 일까, 놓친거야?

답변

1

@CBergson이 지적했듯이 Activity이 다시 만들어지면 테마를 저장하고 다시 만들 수 있습니다.

반면에 당신은 당신의 의 AndroidManifest.xml 다음 줄을 추가하여 Activity 파괴 안드로이드를 방지 할 수 있습니다 :

<activity android:name="YourActivity" 
    android:configChanges="orientation|screenSize" /> 

는 또한 here을 읽고.

+0

그래, 노력했다. 하지만 나는 회전 허용 = D 당신이 테마를 저장한다는 것을 의미합니까? SharedPeferences에 이미 저장하고 활동이 생성되면로드합니다. – crossRT

+0

좋아, 거기에 코드를 게시하지 않았다, 당신이 그것을 저장 ... 내가 당신이 나를 놓친 생각, 내 솔루션은 회전을 부정하는 것과 아무 상관이 없다. 그것은 단지 안드로이드가 회전 할 때 활동을 재현하지 않도록 지시합니다. 그냥 시도해보십시오 ... – alex

+0

늦게 답변드립니다. 네, 저의 실수는 당신의 대답이 아주 잘됩니다. 그리고 개발자 doc [activity] (http://developer.android.com/guide/topics/manifest/activity-element.html)에서 검색합니다. 정말 고맙습니다. = D – crossRT

0

환경 설정에 현재 테마를 저장/업데이트해야 기본값이되지 않습니다. 회전이 발생하면 활동 라이프 사이클 자체가 반복됩니다 (중지 - 파괴 시작 등). 다음 활동주기가 시작되기 전에주기가 완료되기 전에 저장해야합니다.

+0

저장 하시겠습니까? SharedPreferences에 문자열로 테마를 저장하고 액티비티가 생성 될 때마다로드합니다. – crossRT

+0

코드를 게시하십시오. 사용자가 옵션을 제공하여 사용자가 선택할 수있게 한 다음, 어디에서 저장합니까? – Canberk

+0

기본 SharedPreference에 저장하고 옵션은 PreferenceActivity에 제공합니다. 이제 문제는 작업이 시작될 때 올바르게 설정된 테마이지만 회전 후 기본값으로 다시 설정됩니다. – crossRT