本例演示了当我们的activity发生大的变化时,我们可以调用activity的recreate()方法 来对activity进行重新构建,重新构建将产生一个新的activity实例
布局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/info" />
<Button
android:onClick="click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:text="Recreate"/>
</LinearLayout>
ManiActivity类
/**
* 本例演示了当我们的activity发生大的变化时,我们可以调用activity的recreate()方法
* 来对activity进行重新构建,重新构建将产生一个新的activity实例
* @author aaaa
*
*/
public class MainActivity extends Activity {
private int mCurrentTheme;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*
* 重建时会首先从savedInstanceState中上次activity被销毁前保存的状态
* 我们在这里就可以根据上次保存的样式,来改变重建后新activity的样式
* 以实现和前一个activity的区别
*/
if(savedInstanceState!=null){
switch (savedInstanceState.getInt("theme")) {
case android.R.style.Theme_Holo_Light:
mCurrentTheme=android.R.style.Theme_Holo_Dialog;
break;
case android.R.style.Theme_Holo_Dialog:
mCurrentTheme=android.R.style.Theme_Holo;
break;
default:
mCurrentTheme=android.R.style.Theme_Holo_Light;
break;
}
//设置activity的样式为改变后的当前样式
setTheme(mCurrentTheme);
}
setContentView(R.layout.activity_main);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("theme", mCurrentTheme);
}
public void click(View v){
//重建activity
recreate();
}
}
我们在配置文件中对activity的初始样式进行了配置
android:theme="@android:style/Theme.Holo"