android 横竖屏切换令人费解的地方(横屏切换竖屏调用两次onConfigurationChanged)及其个人看法
2011-09-28 22:17 youxiachai 阅读(5866) 评论(1) 编辑 收藏 举报Android学习之横竖屏切换与Activity生命周期的关系
这篇文章有着很详细的报告….
走近科学
对于最后一点表达一下自己的看法…
关于横屏切换竖屏调用两次,我特地的看了一下全键盘的手机,在观察中发现
1,当推出键盘的时候,会触发硬件的改变,使手机竖屏变成了横屏
2,当推进键盘的时候,合上手机的一刻,触发的是同一样的固件,由于,固件是无法辨别那个是推进,和推出,发出的是一样的信号,然后系统就会认为这是一个横屏改变,等到合上手机的时候系统再接受到一个信号,然后切换成竖屏.这样系统,认为横屏切换竖屏改变了两次,这样就导致调用了两次onConfigurationChanged();
为了证明这点我写了以下代码测试:
1,设置一个用来切换横竖屏的button
2,
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
private
Button ok;
private
boolean
land =
false
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.appwidget_configure);
ok = (Button) findViewById(R.id.save_button);
ok.setOnClickListener(
new
Buttonlistener());
}
class
Buttonlistener
implements
OnClickListener{
public
void
onClick(View v) {
// TODO Auto-generated method stub
Log.d(
"app"
,
"ok"
);
if
(!land){
//切换成横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
land =
true
;
}
else
{
//切换成竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
land =
false
;
}
}
}
@Override
public
void
onConfigurationChanged(Configuration newConfig) {
super
.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if
(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.d(
"app"
,
"land"
);
Toast.makeText(
this
,
"landscape"
, Toast.LENGTH_SHORT).show();
//切换到横屏的时候我们需要重新创建button
ok = (Button) findViewById(R.id.save_button);
ok.setOnClickListener(
new
Buttonlistener());
}
else
if
(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Log.d(
"app"
,
"portalit"
);
Toast.makeText(
this
,
"portrait"
, Toast.LENGTH_SHORT).show();
}
}
3,实验:
可以看出单纯的横竖屏切换,系统是只认一次的,
无论是横屏切换竖屏,还是竖屏切换横屏都只是调用了一次onConfigurationChanged();
这个方法只是为了证明我的推测.
使用这个方法以后将会导致全键盘手机推入推出来无法切换横竖屏.
PS:以前的想法白痴了.....
实际上,模拟器的翻转是以一个逆时针的方向旋转...你按两次 ctrl + f11实际上是翻转了三次...
作者:游戏阿柴
出处:http://www.cnblogs.com/youxilua
本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
微博联系:新浪微博
用支付宝赞助博主:http://me.alipay.com/youxilua
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架