android横屏布局文件设置
一、AndroidManifest.xml配置
1、在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入 android:screenOrientation=”landscape”属性即可(landscape是横向,portrait是纵向)
或
2、通过在里面调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);方法,就可以设置横屏了,同样,也可以设置竖屏,这个需要看你的需求,比如像我这样,是需要和前面的activity一样的朝向的,就可以在intent中传递一个值过来,标明是需要横的还是竖的。
到这里,你就最终来通过这个this.getResources().getConfiguration().orientation来获得当前的页面朝向,就会发现和需求的一样了
二、布局文件
第一,横竖屏切换连带横竖屏布局问题:
如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。
可以通过以下两种方法来切换布局:
1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局。
2)假如布局资源不按照如上设置,则可以通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新加载当前Activity的onCreate方法(也就是说:该Activity的生命周期要重头开始),你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout 。
/** 1:竖屏 2:横屏 判断屏幕以旋转的方向 */
private int orientation;
orientation=getResources().getConfiguration().orientation;
第二,强制设定屏幕的横、竖屏方向:
Android横竖屏切换在手机开发中比较常见,很多软件在开发过程中为了避免横竖屏切换时引发不必要的麻烦,通常要强制设置横竖屏的方向,
通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来实现。
比如下列设置:
横屏显示设置:android:screenOrientation="lanscape" 竖屏显示设置:android:screenOrientation="portrait"
当然上述修改也可以在Java代码中通过代码来实现:(android屏幕的切换会重启Activity,所以在Activity销毁前保存当前活动的状态,并在Activity再次Create的时候载入配置)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
第三,拦截横竖屏切换 需要的配置文件:onConfigurationChanged
Activity每次横竖屏切换都会重新调用onPause->onStop-> onDestory->onCreate->onStart->onResume(为此内容和数据要保存和读取,否则转屏之前的内容就会消失了)
很多时候这样的结果让程序繁琐,为此Android提供了在manifest中设置android:configChanges属性,从而让Activity不延续上述的重建流程;
方式一)在Android工程的Mainfest.xml中配置Activity:android:configChanges="keyboardHidden|orientation ,横竖屏切换之后就不会去执行OnCreat函数了,而是会去调用onConfigurationChanged()这样就能控制横竖屏的切换了。
方式二)用户可以在Activity或View的:onConfigurationChanged(Configurationnew Config),函数中获取当前横竖屏参数。至于其调用顺序跟touch时间的传递顺序相似,不过他没有消费事件的概念,会顺次调用到每一个onConfigurationChanged函数。
需要重写Activity的onConfigurationChanged方法。实现方式如下,不需要做太多的内容:
需要注意的是,onConfigurationChanged函数中只能获得横竖屏切换后的参数,在该函数中获取不到新的Layout和控件的尺寸位置信息,如果要处理尺寸和位置信息,必须通过消息异步或者延时调用;
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// land do nothing is ok
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// port do nothing is ok
}
}
第四,自适应切换屏幕:
如果想让它启动的时候是横屏的话就横屏表示,纵屏的话就纵屏表示,然后手机切换横竖屏就不能用了该怎么解决呢?
首先:在Mainfest.xml中追加
android:screenOrientation="sensor" android:configChanges="orientation|keyboardHidden"
然后:取得屏幕的长和宽,进行比较设置横竖屏的变量。
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
if (width > height) {
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; // 横屏
} else {
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; // 竖屏
}
然后:在onConfigurationChanged()函数中追加this.setRequestedOrientation(orientation)
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
this.setRequestedOrientation(orientation);
}
但是这样的话你切到别的画面的时候再回到原画面,它就仍然是横的或者是纵的。怎么让它从别的屏幕回来后,又重新横竖屏布局呢?
只要在OnResume()中在设定下就行了,但是这个仅仅只是支持横竖屏只有一个layout的;
protected void onResume() {
orientation = ActivityInfo.SCREEN_ORIENTATION_USER;
this.setRequestedOrientation(orientation);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
if (width > height) {
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else {
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
super.onResume();
}
有三点请注意:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
android横屏布局文件设置的更多相关文章
- Android -- Layout布局文件里的android:layout_height等属性为什么会不起作用?
有的时候,我们配置好的布局文件,在加载完成添加到我们的Activity中后发现,并没有安装我们设置的属性来布局,比如我们设置了android:layout_marginTop="100dip ...
- Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起
本文主要内容是讲解一个视图View或者一个ViewGroup对象是如何添加至应用程序窗口中的.下文中提到的窗口可泛指我们能看到的界面,包括一个Activity呈现的界面(我们可以将之理解为应用程序窗口 ...
- Android Layout布局文件里的android:layout_height等属性不起作用
有的时候,我们配置好的布局文件,在加载完成添加到我们的Activity中后发现,并没有安装我们设置的属性 来布局,比为我们设置了android:layout_marginTop="100di ...
- Android中布局文件中使用onClick属性
安卓开发中,布局文件中的控件有一个属性,是onClick,例如: <Button android:id="@+id/button1" ...
- Android无布局文件下自定义通知栏notification的 icon
在开发项目一个与通知栏有关的功能时,由于自己的项目是基于插件形式的所以无法引入系统可用的布局文件,这样无法自定义布局,造成无法自定义通知栏的icon. 在网上也有一种不用布局文件更换icon的方法,但 ...
- Xamarin.Android之布局文件智能提示问题
一.前言 看到有人问关于xamarin.android的布局没智能提示问题(VS 2015),当然,写布局这东西没提示这是一件相对痛苦的事 ,所以这里就提供一个解决的方案! 二.解决方案 想要智能提示 ...
- Android中将布局文件转成bitmap
在实践中发现,有些需要打印的小票高度小于屏幕的高度,而有些小票内容过多高度高于屏幕高度. 小于屏幕高度的布局文件转成bitmap较为容易,高于屏幕高度的布局文件转成长图bitmap较为复杂. 一.小于 ...
- android studio布局文件/XML怎么代码补全
android studio中的布局文件代码补全方式是打第一个字母就提示了,而java代码有时候要按快捷键. 布局文件的话呢,要写在标签开始处才提示,在标签闭合处有时候不提示,有时候在内容里也会有不提 ...
- Android表格布局之设置边框
Android表格布局本身没有边框,不过可以通过背景色的设置可以实现表格边框的显示. 首先可以设置TableRow的背景色,然后设置内容的背景色.根据它们的颜色差就出现了边框.只要微调Content与 ...
随机推荐
- 人工智能-baidu-aip语音识别(语音转文字)
做这个之前,需要在电脑上安装FFmpeg工具,将要转的语音格式转为PCM格式.FFmpeg不需要安装,下载后,打开bin文件夹,然后将路径放在系统环境变量里.记住,要关闭所有打开的Pycharm,然后 ...
- CoreThink主题开发(七)使用H-ui开发博客主题之新闻资讯正文页面
感谢H-ui.感谢CoreThink! 效果图: 后台发文章有上传附件.封面的功能,但是前台代码中有,不能显示,去除了,前台页面还有社会化分享,百度的,页面也不显示. Blog/Cms/Index/d ...
- 利用FFmpeg将RTSP转码成RTMP发布在RED5
安装jdk,并设置环境 from:http://www.w3c.com.cn/%E5%88%A9%E7%94%A8ffmpeg%E5%B0%86-ipcamera-%E7%9A%84rtsp%E8% ...
- Android:日常学习笔记(8)———探究UI开发(5)
Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...
- LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串
所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...
- Ubuntu系统常用操作命令
1.基本命令: sudo 提升用户权限为root用户 ls 显示文件内容 cd 进入指定路径,后接路径参数 如cd /进入根目录 cd -进入用户目录 cd ..返回上一级目录 mv xx.txt x ...
- 建议50:Python中的高级数据结构
# -*- coding:utf-8 -*- ''' Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint collections模块包含了内建类型之外 ...
- Nginx之Location模块
location 的语法 locltion可以把不同方式的请求,定位到不同的处理方式上 location分类及用法 location大致分为三类: location = patt {} [精准匹配] ...
- INSPIRED启示录 读书笔记 - 第35章 情感接纳曲线
技术接纳曲线 涉及了技术创新者.尝鲜者.早期消费大众.后期消费大众和跟随者,很少有产品能越过鸿沟——获得尝鲜者以外消费者的青睐 不同类型的用户具有不同的情感需求,除了技术接纳曲线模型描述用户外,还应该 ...
- JAVAWeb学习总结(3)
JavaWeb学习总结(三)——Tomcat服务器学习和使用(二) 一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命 ...