扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
将主页面activity设置为singleTask启动方法。
创新互联的客户来自各行各业,为了共同目标,我们在工作上密切配合,从创业型小企业到企事业单位,感谢他们对我们的要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。专业领域包括网站制作、网站设计、电商网站开发、微信营销、系统平台开发。
直接在返回的时候跳转到主页面即可。代码如下://MainActivity为你的主页面activity,activity为现在的页面
Intent i = new Intent(activity.this,MainActivity.class)
startActivity(i);/ol原理:当activity为singleTask的时候跳转会清空当前activity任务栈上面所有的activity。
就是把不同的view添加到ViewFlipper里面,就可以左右滑动顺序循环显示了,也可以指定显示哪个view,
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
this.detector.onTouchEvent(ev);//在这里先处理下手势左右滑动事件
return super.dispatchTouchEvent(ev);
}
Android横竖屏要解决的问题应该就两个:
一.布局问题
二.重新载入问题
1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数:
"unspecified":默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
"landscape":横屏显示(宽比高要长)
"portrait":竖屏显示(高比宽要长)
"user":用户当前首选的方向
"behind":和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
"sensor":有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
"nosensor":忽略物理感应器,这样就不会随着用户旋转设备而更改了("unspecified"设置除外)。
也可以在Java代码中通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)来设置。
如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。可以通过以下方法来切换布局:
1)在res目录下建立layout-land和layout-port目录,相应的layout文件不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,模拟器会自动寻找。
2)通过 this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏然后来加载相应的 xml布局文件。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout xml.
1 if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
2 Log.i("info","landscape"); // 横屏
3 }
4 else if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
5 Log.i("info","portrait"); // 竖屏
6 }
在onConfigurationChanged()方法中也可以检测拥有硬键盘的键盘状态
1 //检测实体键盘的状态:推出或者合上
2 if (newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_NO){
3 //实体键盘处于推出状态,在此处添加额外的处理代码
4 }
5 else if(newConfig.hardKeyboardHidden ==Configuration.HARDKEYBOARDHIDDEN_YES){
6 //实体键盘处于合上状态,在此处添加额外的处理代码
7 }
2.重新载入问题。如果不需要从新载入,可以在AndroidManifest.xml中加入配置 android:configChanges="orientation|keyboardHidden",配置 android:configChanges的作用就是如文档所说的:Specify one or more configuration changesthat the activity will handle itself. If not specified, the activity will berestarted if any of these configuration changes happen in the system。这样在程序中Activity就不会重复的调用onCreate()甚至不会调用onPause、onResume.只会调用一个 onConfigurationChanged(Configuration newConfig)。如果需要重新载入,则不需要做任何修改。不过如果需要在重新载入过程中保存之前的操作内容或数据,则需要保存之前的数据。然后在 activity的onCreate()中取出来。当然,如此就不能设置android:configChanges()了,否则就不会调用 onCreate()方法。
如果要彻底禁止翻转,可以设置android:screenOrientation的属性为nosensor,如此就可以忽略重力感应带来的麻烦了。不过在模拟器上不管用,在真机上是正确的。android:screenOrientation="portrait"
则无论手机如何变动,拥有这个属性的activity都将是竖屏显示。
android:screenOrientation="landscape",为横屏显示。
这里提一个小知识,Android模拟器中,快捷键"Ctrl+F11/F12"可以实现转屏
每一个tab的activity跟平常写的activity一样,在onCreate里面设置布局,初始化之类的。通过tabWidget去控制tab的跳转,这样每一个tab的activity切换并不是真正的启动,而是交给系统托管。
挺不错的设计.
在实际上手 5.0 之前, 我也一度对这个界面的实际效果产生怀疑, 但是实际上手之后发现自己多虑了.
首先, 新的多任务界面在 Nexus 4 上可以最多显示清楚五个应用 (第五个应用的标题会被略遮住一些, 第六个往后会露出一条缝, 只能看出颜色), 在 4.X 上最多能显示四个. 另外, 卡片的 App Bar 可以跟随应用改变颜色 (比如 Gmail 卡就是红色的
Bar, Keep 就是黄色, Messenger 就是蓝色, 等等), 也增加了应用的识别度. 而 4.X Recents 界面里的缩略图识别度其实很低, 的大部分时候还是要靠图标和标题 —— 而实际上在 5.0 中, 标题和图标的大小并没有缩小.
而在 4.X 上, 还有一个很严重的问题就是多任务界面与其他屏幕的转换非常诡异. 如果你仔细观察过 Android 4.X 从某个应用进入 Recents 的动画, 你会发现这个动画是不能接应的 (在屏幕缩小的过程中, 内容会扭曲, 然后变成 Recents 里面的小块, 有兴趣的同学可以自己把动画持续时间调成 X10 看看). 而在 5.0 中, 进出 Recents 界面的动画非常平顺 (不会发生扭曲, 而是直接缩放 + 展开), 同时也符合系统自己的隐喻 (5.0 中, 打开应用的动画不再是放大, 而是一张卡片从屏幕底部飞入, 从主屏进入 Recents 界面也是一堆卡片从屏幕底部飞入),
也就是说, 在 4.X 里, Recents 是一个专门的层级, 位于桌面与应用之间, 而在 5.0 中, 桌面与 Recents 合为一体 (Google 甚至把 Google Search Box 也放进了Recents 界面), 是系统层级方面的调整. 如果这时再配上 4.X 的 Recents, 就打乱了这层级关系.
而且, 如果你在 5.0 的 Recents 界面稍作停留, 每张卡片的右上角都会出现一个小 X, 这样便可以让那些 (到现在都) 还不知道划去卡片可以关闭应用的用户关闭应用. 这个操作其实和 Chrome 是保持一致的. 同时在 5.0 中, Document UI (大概是叫这个名字吧? 如果记错了请指正) 允许一个应用同时显示多个界面在 Recents 中 (如 Chrome 的多个标签页),
在卡片下他们会靠得更近以区分于其他应用, 而如果是 4.X 的 Recents 的话则不能体现出这一点.
还有一个很有意思的地方就是, 如果在 4.X 上, 当有超过 3 个应用被打开时, 多任务界面中想点击最上面的那个应用几乎是不可能的, 而在 5.0 中, 卡片的存在使得整个多任务列表可以被拉到屏幕 2/3 高度, 最上面的一张卡片可以触及的范围甚至达到了屏幕的下半部分, 可以直接单手触到,
非常便利. 而楼上其他同学也提到了, 要滑动同样数量应用的距离, 5.0 上是比 4.X 上要短的.
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。
Android总Activity的启动模式分为四种:
Activity启动模式设置:
activity android:name=".MainActivity" android:launchMode="standard" /
Activity的四种启动模式:
1. standard
模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。
2. singleTop
如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
3. singleTask
如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
4. singleInstance
在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。
其中standard是系统默认的启动模式。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流