프로그래밍 방식으로 활동 테마 변경
특정 경우 내 활동에서 대화 테마를 제거해야하지만 작동하지 않는 것 같습니다. 여기에 예가 있습니다.
첫 번째 활동 :
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startActivity(new Intent(MainActivity.this, SecondActivity.class));
}
두 번째 활동 :
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setTheme(android.R.style.Theme);
setContentView(R.layout.activity_second);
}
매니페스트 발췌 :
<activity android:name="SecondActivity" android:theme="@android:style/Theme.Dialog"></activity>
내가 실행할 때 여전히 대화 테마입니다.
API10
감사.
마찬가지로 문서는 말을 당신은 전화를해야 setTheme
모든보기 출력하기 전에. 처리에 super.onCreate()
참여 하는 것 같습니다 view
.
따라서 테마간에 동적으로 전환하려면 다음 과 같이 setTheme
먼저 호출 super.onCreate
하면됩니다.
public void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
user1462299의 응답은 훌륭하게 작동하지만 fragments를 포함 하면 원래 활동 테마를 사용합니다. 테마를 모든 조각에도 적용하려면 대신 Context 의 getTheme () 메서드를 재정의 할 수 있습니다 .
@Override
public Resources.Theme getTheme() {
Resources.Theme theme = super.getTheme();
if(useAlternativeTheme){
theme.applyStyle(R.style.AlternativeTheme, true);
}
// you could also use a switch if you have many themes that could apply
return theme;
}
더 이상 onCreate () 메서드에서 setTheme ()를 호출 할 필요가 없습니다. 이러한 방식으로이 컨텍스트 내에서 현재 테마를 가져 오기 위해 모든 요청을 재정의합니다.
내가 늦었지만 여기에 해결책을 게시하고 싶습니다 . 여기
에서 전체 소스 코드를 확인 하십시오 .
환경 설정을 사용하여 테마를 변경할 때 사용한 코드입니다 ..
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
String themeName = pref.getString("prefSyncFrequency3", "Theme1");
if (themeName.equals("Africa")) {
setTheme(R.style.AppTheme);
} else if (themeName.equals("Colorful Beach")) {
//Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show();
setTheme(R.style.beach);
} else if (themeName.equals("Abstract")) {
//Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show();
setTheme(R.style.abstract2);
} else if (themeName.equals("Default")) {
setTheme(R.style.defaulttheme);
}
setcontentview 앞에 코드를 넣어야합니다.
즐거운 코딩!
이것은 나를 위해 잘 작동합니다.
theme.applyStyle(R.style.AppTheme, true)
용법:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//The call goes right after super.onCreate() and before setContentView()
theme.applyStyle(R.style.AppTheme, true)
setContentView(layoutId)
onViewCreated(savedInstanceState)
}
참고 URL : https://stackoverflow.com/questions/11562051/change-activitys-theme-programmatically
'Programming' 카테고리의 다른 글
SQL 문에서 항상 매개 변수를 사용하는 것을 선호하는 이유는 무엇입니까? (0) | 2020.08.14 |
---|---|
Eclipse에서 다른 Android 프로젝트의 Android 라이브러리 프로젝트를 참조 할 수 없습니다. (0) | 2020.08.14 |
람다 식에 사용되는 변수는 최종적이거나 사실상 최종적이어야합니다. (0) | 2020.08.14 |
구조체 이니셜 라이저에서 점 (.)은 무엇을 의미합니까? (0) | 2020.08.13 |
RTTI를 사용하는 것보다 '순수한 다형성'이 선호되는 이유는 무엇입니까? (0) | 2020.08.13 |