首先如何实现竖屏和横屏下不同的控件布局
1、在activity_main.xml文件的布局窗口找到create landscape variation,就是创建另一个横屏的布局文件
2、在工程目录看到多了一个activity_main.xml文件,在这里进行横屏情况下的控件布局
3、如下图所示为两种布局,按键分别是三行两列,两行三列分布
4、监听button1,按下按钮1后将上方的Textview显示由welcome变为button1,并重写ondestroy函数,调用destroy函数时打印相关信息
测试 屏幕旋转时 Textview显示的变化以及destroyed在何时会被调用
从左至右依此是开始界面->按下button1后显示界面->旋转后界面
测试发现每次旋转屏幕,都会调用一次destroy函数,说明旋转屏幕会导致程序的销毁,再重新开始一个新的程序,这也就意味着旋转后界面上的显示信息无法得到保存,所以图二到图三可以看到Textview的显示内容由button1变为了welcome就是这个原因。
5、如何保证在旋转屏幕后显示界面的信息依旧不改变?
if(savedInstanceState!=null) //需要先判断是否为空,不为空代表有历史数据保存需要进行数据复原,否则会引起空指针异常 { String s=savedInstanceState.getString("key"); //savedInstanceState存放的Bundle信息实际就是从outState而来 textView.setText(s); } button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { textView.setText(R.string.button1); } }); } @Override //不过这种方式保存数据只是临时保存,无法永久保存 protected void onSaveInstanceState(@NonNull Bundle outState) { //该函数用于提取出历史数据,保存到outState中 super.onSaveInstanceState(outState); outState.putString("key",textView.getText().toString());//将textview中的内容存放在键值为KEY的字符串中,最终会存为一个Bundle }
调用onSaveInstanceState函数,可以暂时保存要保持的历史数据,在程序运行后判断savedInstanceState是否为空,对数据进行复原显示,不过这种方式只是暂时的保存了历史数据,不过应用到屏幕旋转中也能解决数据丢失的问题。
这样旋转屏幕后数据依旧不会改变。