问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android 横竖屏切换怎么禁止重载

发布网友 发布时间:2022-05-10 16:49

我来回答

4个回答

热心网友 时间:2023-10-17 02:31

Activity每次横竖屏切换(包括用setRequestedOrientation调用)都会重新调用一轮onPause-> onStop-> onDestory-> onCreate->onStart->onResume操作,从而销毁原来的Activity对象,创建新的Activity对象,这是因为通常情况下软件在横竖屏之间切换,界面的高宽会发生转换,从而可能会要求不同的布局。具体的布局切换可以通过如下两种方法来实现:
1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序自己会调用Activity的onCreate方法,从而根据当前横竖屏情况自动加载响应的布局。
2)假如布局资源是不一样又不按照如上设置,则需要通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件(比如mainP为竖屏mainL为横屏)。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout xml。
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
int mCurrentOrientation = getResources().getConfiguration().orientation;
if ( mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT ) {
// If current screen is portrait
Log.i("info", "portrait"); // 竖屏
setContentView(R.layout.mainP);
} else if ( mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE ) {
//If current screen is landscape
Log.i("info", "landscape"); // 横屏
setContentView(R.layout.mainL);
}
init();//初始化,赋值等操作
findViews();//获得控件
setListensers();//设置控件的各种监听方法
}
上面只是对布局切换做了描述,实际上由于重启Activity在未加处理的情况下必然导致数据的丢失和重新获取,这样用户体验会非常差。为此就要在切换前对数据进行保存,切换重启后对数据进行恢复,具体操作的步骤如下:
重写Activity.onRetainNonConfigurationInstance(),用户横竖屏切换前保存数据
@Override
public Object onRetainNonConfigurationInstance() {
final MyDataObject data = collectMyLoadedData();
return data;
}
在onCreate()函数中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
if (data == null) {
data = loadMyData();
}
...
}

热心网友 时间:2023-10-17 02:31

@Override
public void onConfigurationChanged(Configuration config) {

try {
super.onConfigurationChanged(newConfig);

if (this.getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
//横屏时要处理的代码,

//这里的代码是当屏幕横屏时当成竖屏显示

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

} else if (this.getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_PORTRAIT) {
//竖屏时要处理的代码

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}
} catch (Exception ex) {
}

}

以上就可以简单的控制你的app画面的显示方式并且在显示方式不变的情况下横竖
屏切换时不会重新加载画面,即优化的你的app同时用户体验也相应提高了。
以上,希望对大家有帮助。呵呵。

热心网友 时间:2023-10-17 02:32

显示选项 选择禁用(不勾选)自动旋转屏幕

热心网友 时间:2023-10-17 02:32

设置 显示 里面关掉
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ccie安全到底是讲些什么 血型亲子鉴定原理是什么? 亲子医学鉴定的方法是什么?? 厦门劲草信息科技有限公司怎么样? 河北劲草信息科技有限公司怎么样? 老公妈妈去世了,带的孝帕被老公带回家,影响吗? ...值和劳动定额有什么区别?敢请高手赐教,越详细越好!谢谢! WPS教程怎么取消打印预览分割线 西安的消费水平是高吗? 西安的消费水平怎么样 如何在android studio中实现 横屏 和纵屏 的切换 如何让Android横竖屏切换时不销毁当前activity 有谁知道这个3D软件是什么? 梦见黄色白色的长在田里的鲜花 学习动漫设计需要用什么软件,大侠指点 打牌的人梦见在花黄色的花地怕照 如何做好企业工程建设内部监管 以建设企业为管理主体是哪种项目独有的特点? 为什么要推广新能源汽车? “电动·未来”发布会说了什么?新能源汽车成明星是为何? 除权除息参考价是什么 怎样在电脑上同时登陆两个 电脑如何登陆两个 电脑怎么登录2个 对于建设企业,管理事项,一般包括什么等? 现在好多纯电动汽车都宣传智能化设备和功能,真的实用? 电脑怎么登录两个 新能源是通过什么渠道去宣传的? 新能源汽车怎么样?值得购买吗? 教师资格证认定时普通话证书核验了三甲的,但是也上传了二艺的怎么办? 怎样做一个自己邮箱? 怎么关掉redshift ubuntu an error occurred during the installation of assmbly component怎么回事? 中瑞股份主力还在吗 电规总院电力发展研究院属于哪个集团 中锐股份是做什么的 电力规划设计总院怎么样? 国家电力规划设计总院公务员收入如何 水电水规划设计总院与电力规划设计总院是不是一回事 中锐地产是国企吗 合肥电力规划设计院怎么样? 电力规划设计总院是什么级别的单位 中锐网络科技有限公司怎么样? 深圳供电规划设计院有限公司怎么样? 浙江中锐重工科技股份有限公司怎么样? 您好,请问有没有了解电力规划设计总院的,待遇和发展前景? 淮南电力规划设计院有限公司怎么样? 需要发输变电单位办电力丙级乙级资质什么要求? 国核电力规划设计研究院与传统的六大电力设计院相比,差别大吗? 学校教师与培训班教师区别是什么