- 浏览: 534421 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tangyunliang:
大哥你太历害了谢谢
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
u013015029:
LZ,请问下,在// 添加消息到聊天窗口 , 这里获取Ed ...
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
endual:
怎么保持会话,我搞不懂啊
Android基于XMPP Smack Openfire开发IM【一】登录openfire服务器 -
donala_zq:
显示:[2013-11-30 11:50:36 - Andro ...
android-----------新浪微博 -
donala_zq:
哥,运行不了啊
android-----------新浪微博
横竖屏处理是开发应用是比较基础的一个要点,几乎都会用到。
一、layout-land和layout-prot的区别与使用
默认情况下,创建的Android项目里只有一个layout文件夹,尽管这样也可以横竖屏切换用,但是某些布局横屏过后闲的格外的丑。
横屏过后就显示的不全了,有时候看着比较纠结。所以需要在横屏的使用重新载入新的布局文件
解决办法是:先把layout目录删除了,因为可能跟之后的产生冲突。然后新建两个文件夹,一个layout-land,另一个是layout-prot。
layout-land:存放横屏布局文件,如main.xml。布局名字与layout-prot的一样
layout-prot:存放竖屏布局文件,名字与layout-land的一样
剩下的事情就可以交由手机处理了,手机会自动处理横竖屏时布局之间的切换(前提是你的手机支持横竖屏,并且:设置-显示-自动旋转屏幕)
先看看两个布局文件吧,Activity可以不用管。
layout-land/main.xml
layout-prot/main.xml
效果图:
竖屏:[img]
[/img]
横屏:
[img]
[/img]
注:切换模拟器的命令式CTRL+F12
这里有一点需要注意的是,横竖屏切换的生命周期的问题。
在上面的那种情况下,横竖屏切换的时候,会销毁Activity后然后再次创建。
在不加入任何设置的时候,它的生命周期是这样的:
onCreate-onStart-onResume 开始运行时
onPause-onStop-onDestroy-onCreate-onStart-onResume 横竖屏切换的时候都是这样
当在AndroidManifest.xml中的activity标签中加入了:
android:configChanges="orientation|keyboardHidden"
或者android:configChanges="orientation"后
横竖屏切换就不需要重新载入了,也就是说不用销毁Activity后再重新创建Activity了。
二、如何限定横屏或者竖屏?
有些人讨厌玩手机的时候横竖屏来回的切换,有些应用也限定了应用程序只使用横屏或者只使用竖屏,即使手机设置了“自动切换横竖屏”。比如“水果忍者”是不能竖屏的(双人模式除外了)
解决办法:只需要在AndroidManifest.xml的Activity标签中加入:android:screenOrientation="landscape"
android:screenOrientation="landscape"表示横屏
或
android:screenOrientation="protrait"表示竖屏
这样,所设定的应用程序就只能是横屏或者竖屏了
三,横竖屏切换时关于Activity重新载入的问题(onConfigurationChanged()方法)
例如上面的那个例子,Activity每次横竖屏切换的时候是重新载入的,但是比如我们在玩游戏的时候切换了一下屏幕,我们不可能要重新玩起,所以需要有一种解决横竖屏切换的时候保存当前状态,不用重新载入的方法
解决方案:可以使用onConfigurationChanged方法,该方法可以在用户切换横竖屏的时候就不用重新执行onCreate方法了
提醒:这个方法的使用场景比如播放影音的时候转换了一下屏幕,如果是分别设置了两个布局的话,那么横竖屏要对应不同布局,也意味着还是要执行onCreate方法,所以布局最好是一个(不知对不对,求高手指点)
1、需要在AndroidManifest.xml中的对应的activity标签里加入
android:configChanges="orientation|keyboardHidden"
这条语句的意思是:横竖屏切换或者实体键盘推出合上的时候配置信息的改变
2、需要在AndroidManifest.xml中加入权限
<uses-permission android:name="andorid.permission.CHANGE_CONFIGURATION"/>
3、需要在横竖屏切换时共用的那个Activity里覆盖onConfigurationChanged方法,如下
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE )
{
Toast.makeText(getApplicationContext(), "切换为横屏", Toast.LENGTH_SHORT).show();
}else if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
Toast.makeText(getApplicationContext(), "切换为竖屏", Toast.LENGTH_SHORT).show();
}
}
这里需要说的事,代码中的if语句是判断当前设备是横屏还是竖屏,然后有其对应的操作。之前竟然在屏幕切换的时候设置不同的布局,虽然能够显示不同的布局,但是这个方法就已经毫无意义了,因为横竖屏切换到不同的布局我们可以用上面的第一种方法,而这种最好只是对应一个布局吧,然后在里面进行横竖屏时候的其他操作,防止了重新载入
下面还是看一个例子吧,下面的是一个播放rtsp流的的例子
main.xml
这里需要说一下VideoView的全屏显示的问题,横屏后右边总是空出一块黑色区域,即使通过WindowManager的方式也不能解决,索性只能设置布局为居中显示了,至少好看些
所以只是在清单文件中加入了样式:android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
这种方式在播放视频的时候不能全屏,希望大牛们可以提出自己的解决方案
AndroidManifest.xml
一、layout-land和layout-prot的区别与使用
默认情况下,创建的Android项目里只有一个layout文件夹,尽管这样也可以横竖屏切换用,但是某些布局横屏过后闲的格外的丑。
横屏过后就显示的不全了,有时候看着比较纠结。所以需要在横屏的使用重新载入新的布局文件
解决办法是:先把layout目录删除了,因为可能跟之后的产生冲突。然后新建两个文件夹,一个layout-land,另一个是layout-prot。
layout-land:存放横屏布局文件,如main.xml。布局名字与layout-prot的一样
layout-prot:存放竖屏布局文件,名字与layout-land的一样
剩下的事情就可以交由手机处理了,手机会自动处理横竖屏时布局之间的切换(前提是你的手机支持横竖屏,并且:设置-显示-自动旋转屏幕)
先看看两个布局文件吧,Activity可以不用管。
layout-land/main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:paddingLeft="20dip" android:paddingRight="20dip"> <TextView android:text="cnblogs-花郎" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="20dip" android:textSize="24.5sp" /> <TableLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:stretchColumns="*"> <TableRow> <Button android:text="吃饭" /> <Button android:text="睡觉" /> </TableRow> <TableRow> <Button android:text="旅游" /> <Button android:text="盗墓" /> </TableRow> </TableLayout> </LinearLayout> </LinearLayout>
layout-prot/main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#3500ffff" android:padding="30dip" android:orientation="horizontal"> <LinearLayout android:orientation="vertical" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_gravity="center"> <TextView android:text="cnblogs-花郎" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="25dip" android:textSize="24.5sp" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="吃饭" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="睡觉" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="旅游" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="盗墓" /> </LinearLayout> </LinearLayout>
效果图:
竖屏:[img]
[/img]
横屏:
[img]
[/img]
注:切换模拟器的命令式CTRL+F12
这里有一点需要注意的是,横竖屏切换的生命周期的问题。
在上面的那种情况下,横竖屏切换的时候,会销毁Activity后然后再次创建。
在不加入任何设置的时候,它的生命周期是这样的:
onCreate-onStart-onResume 开始运行时
onPause-onStop-onDestroy-onCreate-onStart-onResume 横竖屏切换的时候都是这样
当在AndroidManifest.xml中的activity标签中加入了:
android:configChanges="orientation|keyboardHidden"
或者android:configChanges="orientation"后
横竖屏切换就不需要重新载入了,也就是说不用销毁Activity后再重新创建Activity了。
二、如何限定横屏或者竖屏?
有些人讨厌玩手机的时候横竖屏来回的切换,有些应用也限定了应用程序只使用横屏或者只使用竖屏,即使手机设置了“自动切换横竖屏”。比如“水果忍者”是不能竖屏的(双人模式除外了)
解决办法:只需要在AndroidManifest.xml的Activity标签中加入:android:screenOrientation="landscape"
android:screenOrientation="landscape"表示横屏
或
android:screenOrientation="protrait"表示竖屏
这样,所设定的应用程序就只能是横屏或者竖屏了
三,横竖屏切换时关于Activity重新载入的问题(onConfigurationChanged()方法)
例如上面的那个例子,Activity每次横竖屏切换的时候是重新载入的,但是比如我们在玩游戏的时候切换了一下屏幕,我们不可能要重新玩起,所以需要有一种解决横竖屏切换的时候保存当前状态,不用重新载入的方法
解决方案:可以使用onConfigurationChanged方法,该方法可以在用户切换横竖屏的时候就不用重新执行onCreate方法了
提醒:这个方法的使用场景比如播放影音的时候转换了一下屏幕,如果是分别设置了两个布局的话,那么横竖屏要对应不同布局,也意味着还是要执行onCreate方法,所以布局最好是一个(不知对不对,求高手指点)
1、需要在AndroidManifest.xml中的对应的activity标签里加入
android:configChanges="orientation|keyboardHidden"
这条语句的意思是:横竖屏切换或者实体键盘推出合上的时候配置信息的改变
2、需要在AndroidManifest.xml中加入权限
<uses-permission android:name="andorid.permission.CHANGE_CONFIGURATION"/>
3、需要在横竖屏切换时共用的那个Activity里覆盖onConfigurationChanged方法,如下
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE )
{
Toast.makeText(getApplicationContext(), "切换为横屏", Toast.LENGTH_SHORT).show();
}else if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
Toast.makeText(getApplicationContext(), "切换为竖屏", Toast.LENGTH_SHORT).show();
}
}
这里需要说的事,代码中的if语句是判断当前设备是横屏还是竖屏,然后有其对应的操作。之前竟然在屏幕切换的时候设置不同的布局,虽然能够显示不同的布局,但是这个方法就已经毫无意义了,因为横竖屏切换到不同的布局我们可以用上面的第一种方法,而这种最好只是对应一个布局吧,然后在里面进行横竖屏时候的其他操作,防止了重新载入
下面还是看一个例子吧,下面的是一个播放rtsp流的的例子
package com.loulijun.demo07; import android.app.Activity; import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; import android.widget.Toast; import android.widget.VideoView; public class Demo07Activity extends Activity { private VideoView video; private String rtspUrl = "rtsp://218.205.231.149:554/mobile/1/2CBE124B67C85A59/48f313651199829e.sdp?id=guest&t=1305313158&en=f2ed024c7963e179f65c65689fdd9887&rs=wap"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); video = (VideoView)findViewById(R.id.play); video.setVideoURI(Uri.parse(rtspUrl)); video.requestFocus(); video.start(); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ) { Toast.makeText(getApplicationContext(), "切换为横屏", Toast.LENGTH_SHORT).show(); }else if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { Toast.makeText(getApplicationContext(), "切换为竖屏", Toast.LENGTH_SHORT).show(); } } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <VideoView android:id="@+id/play" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" /> </LinearLayout>
这里需要说一下VideoView的全屏显示的问题,横屏后右边总是空出一块黑色区域,即使通过WindowManager的方式也不能解决,索性只能设置布局为居中显示了,至少好看些
所以只是在清单文件中加入了样式:android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
这种方式在播放视频的时候不能全屏,希望大牛们可以提出自己的解决方案
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.loulijun.demo07" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:name=".Demo07Activity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="andorid.permission.CHANGE_CONFIGURATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> </manifest>
发表评论
-
Android中如何模拟一次点击(touch)事件
2014-05-06 10:41 0在Android中有时需要模拟某一个View的touch事件, ... -
Android程序Crash时的异常上报
2014-04-28 18:15 0http://blog.csdn.net/singwhatiw ... -
android程序中证书签名校验的方法
2014-04-28 17:58 2008android程序中证书签名校验的方法一 2013-02 ... -
MD5理解错了,哎
2014-03-17 14:14 0MD5只对数据加密是无法解密的,也就是说,你把100加密后,就 ... -
Android 获取网络时间
2014-03-12 11:42 2046Android 获取网络时间 在网上看到的最常见的方式有: ... -
SQLite清空表并将自增列归零
2014-03-05 18:02 1553SQLite清空表并将自增列归零 作者:Zhu Yanfeng ... -
Handler小看一下
2013-11-11 16:42 0android handler调用post方法还是阻塞 su ... -
Frame Animation小看一下
2013-10-12 16:30 792Demo运行效果图: 源码: -
动画小学一下
2013-10-12 16:14 739转自: http://www.eoeandroid.com/f ... -
Android 动画之ScaleAnimation应用详解
2013-10-12 15:49 1014===============eoeAndroid社区推荐:= ... -
android开发中的一个工具类
2013-06-19 16:04 0package com.wanpu.login.dialog; ... -
android TextView怎么设置个别字体颜色并换行?
2013-06-20 09:25 1693(1)、TextView 设置个别字体颜色 TextView ... -
Android开发之文件下载,状态时显示下载进度,点击自动安装
2013-05-07 15:38 1433在进行软件升级时,需要进行文件下载,在这里实现自定义的文件下载 ... -
android中的状态保存
2013-04-07 14:21 982package com.zzl.call; import ... -
android动画基础:tween动画
2013-04-06 11:21 1252工程结构图: [img] [/img] 四个动画的xml ... -
面试中遇到的几个问题
2013-06-09 11:56 1006SAX与DOM之间的区别 SAX ( ... -
Android获取其他包的Context实例,然后调用它的方法,反射!!!
2013-03-25 10:32 1225Android中有Context的概念,想必大家都知道。Con ... -
Android的内存机制和常见泄漏情形
2013-03-06 16:55 798一、 Android的内存机制 Android的程序由Ja ... -
JUnit测试小小demo
2013-03-06 16:37 1168运行效果图: [img] [/img] 项目结构图 ... -
android开发中的异常小工具
2013-03-04 15:53 901package com.zzl.tools; impor ...
相关推荐
总结,Android Studio通过提供不同的layout资源文件来实现横竖屏适配,开发者只需创建相应的布局文件并调整控件布局,然后在AndroidManifest.xml中指定Activity的屏幕方向,就可以轻松实现横竖屏的切换。测试时,...
在"Android zxing完美横改竖屏.txt"文档中,可能包含了以下步骤来实现横改竖: 1. **分析源码**:首先,你需要对ZXing的3.2.0源码进行分析,找出与屏幕方向相关的代码。主要关注`CameraPreview`类和`...
- 例如,在`AndroidManifest.xml`文件中为某个Activity添加`android:screenOrientation="portrait"`表示竖屏模式,`android:screenOrientation="landscape"`表示横屏模式。 示例代码如下: ```xml android:name...
Android支持在res/layout-land(横屏)和res/layout-port(竖屏)目录下放置不同的布局文件,系统会自动根据当前屏幕方向加载相应的布局。 在进行毕业设计时,这份源码可以帮助你了解如何处理屏幕适配,提高应用的...
本篇将深入探讨“Android横竖屏”相关的知识点,以及如何处理屏幕旋转带来的影响。 一、Android屏幕方向 1. 屏幕方向检测:Android系统提供了`Display`类来获取设备的显示信息,包括当前的屏幕方向。可以通过`...
ANDROID自适应屏幕大小和LAYOUT布局横屏竖屏
在`res/layout`目录下,可以创建`layout-land`(横屏)和`layout-port`(竖屏)子目录,分别存放横屏和竖屏的布局文件。这样,当设备方向改变时,Android系统会自动选择相应的布局。 对于二维码扫描,横屏和竖屏...
7. **自适应布局**:在不同方向(横屏、竖屏)和屏幕尺寸的设备上,手势刷新布局应该能正确显示和工作。开发者可能需要根据屏幕尺寸调整布局参数,并处理横竖屏切换时的状态保存和恢复。 8. **可配置性**:为了满足...
为横竖屏提供不同的布局资源,可以在res/layout目录下创建子目录,如res/layout-land(横屏)和res/layout-port(竖屏),然后将对应的布局文件放入相应目录。系统会根据当前屏幕方向自动选择合适的布局。 六、注意...
在Android开发中,手机横竖屏的切换是一个常见的需求,涉及到屏幕方向的处理以及相应的布局适配。这个“Android项目 手机横竖屏.rar”压缩包可能包含了一个示例项目,用于展示如何在Android应用中处理屏幕方向的变化...
Android 自适应屏幕大小和 Layout 布局(横屏竖屏) Android 手机屏幕大小各不相同,例如 480x320、640x360、800x480 等。为了让 App 自动适应不同的屏幕大小,可以在 res 目录下创建不同的 layout 文件夹,例如 ...
使用`android:configChanges="orientation|screenSize"`在`AndroidManifest.xml`中声明屏幕配置变化,然后在`onConfigurationChanged()`方法中处理横竖屏的转换。 3. **横竖屏切换逻辑**:在横竖屏切换时,视频播放...
// 竖屏操作 } } ``` 3. **使用Save/Restore State**:利用WebView的`saveState()`和`restoreState()`方法来保存和恢复视频播放状态。在Activity的`onSaveInstanceState()`和`onCreate(Bundle savedInstanceState...
在竖屏模式下,滑动方向可以是从顶部向下滑动或从底部向上滑动。你可以根据实际需求调整滑动的灵敏度和动画效果。 在实际开发中,我们可能还需要处理数据与视图的绑定,例如在Adapter中使用SwipeLayout。你可以创建...
Android支持为不同的屏幕方向创建不同的资源文件夹,如`res/layout-land`(横屏)和`res/layout-port`(竖屏)。系统会根据当前屏幕方向自动选择对应的资源。 5. **性能考虑**: 默认的Activity重启方式可能会...
总结来说,处理Android的横竖屏问题主要涉及两部分:一是通过资源目录或代码动态调整布局以适应不同屏幕方向;二是通过`AndroidManifest.xml`配置Activity,控制横竖屏切换时是否重新创建Activity以及如何更新界面。...
3. **资源适配**:在res目录下,可以创建不同的价值目录如`values-land`(横屏)和`values-port`(竖屏)来存放特定屏幕方向的资源,包括布局(layout)、字符串(strings)、颜色(colors)等。这样,系统会根据...
在res目录下,开发者可以创建layout-land(横屏)和layout-port(竖屏)子目录,分别存放横屏和竖屏的布局文件。系统会根据设备的当前方向自动选择合适的布局。 除了Activity的生命周期和横竖屏切换,这些案例可能...
8. **适配横竖屏**:通过在AndroidManifest.xml中设置`android:configChanges="orientation|screenSize"`,可以手动处理横竖屏切换时的布局变化。 至于`SurfaceView_Test.rar`和`Layout_Test.rar`这两个压缩包,...