`

android 横竖屏

 
阅读更多

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-port里,模拟器会自动寻找。

2) 通过this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏然后来加载相应的 xml布局文件。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的OnCreate方法,你可以把以下方法放在你的OnCreate中来 检查当前的方向,然后可以让你的SetContentView来载入不同的Layout xml.
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.i("info", "landscape");
}
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Log.i("info", "portrait");
}

2. 重新载入问题。如果不需要从新载入,可以在androidmanifest.xml中加入配置 android:configChanges="orientation",配置android:configChanges的作用就是如文档所说 的:Specify one or more configuration changes that the activity will handle itself. If not specified, the activity will be restarted if any of these configuration changes happen in the system。这样在程序中. Activity就不会重复的调用onCreate()甚至不会调用onPause.onResume.只会调用一个 onConfigurationChanged(Configuration newConfig)。

 如果我在android:configChanges中只设置orientation,他依然会重新加载,只有设置了 orientation|keyboardHidden它才会只调用一个onConfigurationChanged(Configuration newConfig)

如 果需要重新载入,则不需要做任何修改。不过如果需要在重新载入过程中保存之前的操作内容或数据,则需要保存之前的数据。然后在activity的 onCreate()中取出来。当然,如此就不能设置android:configChanges()了,否则就不会调用onCreate()方法。

 

没有设置android:configChanges,切换屏幕时会是onPause,onStop,onDestroy,然后onCreate,onStart,onResume,也就是先停掉,然后再从onCreate开始

 

设置android:configChanges后,只进入

@Override
public void onConfigurationChanged(Configuration config) {
        super.onConfigurationChanged(config);
        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Log.i(TAG, "横屏");
        } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.i(TAG, "竖屏");
        }
       
        setContentView(R.layout.start);
       
        init();
  }

 

重写onConfigurationChanged方法,并在横竖切换的时候加上自己的处理逻辑。

/**

* android:configChanges=”orientation|keyboardHidden|navigation

* 当屏幕翻转时,Activity就不会重复的调用onCreate()、onPause()和onResume().

* 而是调用onConfigurationChanged(Configuration newConfig);

*/

@Override

public void onConfigurationChanged(Configuration config) {

super.onConfigurationChanged(config);

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {

makeText(“横屏”);

} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {

makeText(“竖屏”);

}

setContentView(R.layout.main);

}

 

横竖切屏幕时,布局里面的变量名字不变,变量id对应的相对,线性布局不能变,如果id对应的布局没有用到就没有关系

布局完了后,注意相应的按钮,及按钮监听也要初始化,不过像全局变量不会被重置。如自己定义int curPos;

 

 

 

一:不同的layout

Android手机屏幕大小不一,有480x320, 640x360, 800x480.怎样才能让App自动适应不同的屏幕呢?
   其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。

二:hdpi、mdpi、ldpi

在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。

  drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:

  (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

  (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)

  (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)

  系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。

  在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。

[i]备注:三者的解析度不一样,就像你把电脑的分辨率调低,图片会变大一样,反之分辨率高,图片缩小。 [/i]
屏幕方向:

横屏竖屏自动切换:

     可以在res目录下建立layout-port-800x600和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,这样在手机屏幕方向变化的时候系统会自动调用相应的布局文件,避免一种布局文件无法满足两种屏幕显示的问题。



不同分辨率横屏竖屏自动切换:

以800x600为例
可以在res目录下建立layout-port-800x600和layout-land-800x600两个目录

不切换:


以下步骤是网上流传的,不过我自己之前是通过图形化界面实现这个配置,算是殊途同归,有空我会把图片贴上来。

还要说明一点:每个activity都有这个属性screenOrientation,每个activity都需要设置,可以设置为竖屏(portrait),也可以设置为无重力感应(nosensor)。

要让程序界面保持一个方向,不随手机方向转动而变化的处理办法:
 
在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation="landscape"。
例如(landscape是横向,portrait是纵向):

分享到:
评论

相关推荐

    android横竖屏

    本篇将深入探讨“Android横竖屏”相关的知识点,以及如何处理屏幕旋转带来的影响。 一、Android屏幕方向 1. 屏幕方向检测:Android系统提供了`Display`类来获取设备的显示信息,包括当前的屏幕方向。可以通过`...

    Android studio通过切换不同layout实现横竖屏适配

    在Android应用开发中,横竖屏适配是一个重要的环节,尤其在用户交互丰富的应用中更为关键。Android Studio作为官方推荐的集成开发环境,提供了便捷的方式来处理这个问题。本篇将详细介绍如何在Android Studio中通过...

    Android 横竖屏

    为横竖屏提供不同的布局资源,可以在res/layout目录下创建子目录,如res/layout-land(横屏)和res/layout-port(竖屏),然后将对应的布局文件放入相应目录。系统会根据当前屏幕方向自动选择合适的布局。 六、注意...

    android 手机强制横竖屏

    下面将详细介绍如何实现Android手机的强制横竖屏功能。 一、Android布局管理 在Android开发中,布局文件(XML)定义了用户界面的结构和组件。通过在布局文件中使用`android:screenOrientation`属性,可以设置...

    android经典开发案例60个(源码类).rar_Activity切换_android_android 横竖屏_android

    在res目录下,开发者可以创建layout-land(横屏)和layout-port(竖屏)子目录,分别存放横屏和竖屏的布局文件。系统会根据设备的当前方向自动选择合适的布局。 除了Activity的生命周期和横竖屏切换,这些案例可能...

    android 横竖屏 不变形的 二维码扫描框

    在Android开发中,创建一个横竖屏切换时不会变形的二维码扫描框是一项常见的需求。这个题目涉及的关键技术点包括屏幕适配、布局管理以及二维码扫描的相关原理。 首先,我们需要理解Android设备的屏幕方向切换。在...

    Android zxing3.2完美横屏改竖屏

    在"Android zxing完美横改竖屏.txt"文档中,可能包含了以下步骤来实现横改竖: 1. **分析源码**:首先,你需要对ZXing的3.2.0源码进行分析,找出与屏幕方向相关的代码。主要关注`CameraPreview`类和`...

    Android自适应屏幕大小和layout布局(横屏竖屏)

    - 例如,在`AndroidManifest.xml`文件中为某个Activity添加`android:screenOrientation="portrait"`表示竖屏模式,`android:screenOrientation="landscape"`表示横屏模式。 示例代码如下: ```xml android:name...

    【Android每周专题】横竖屏切换

    当设备从横屏切换到竖屏,或者反过来,Android会调用Activity的相关生命周期方法,例如`onConfigurationChanged()`。默认情况下,系统会销毁并重新创建Activity以加载对应方向的资源。 1. **屏幕配置更改**: ...

    让AndroidX86竖屏显示

    通过上述步骤,我们成功地将AndroidX86从默认的横屏显示模式改为竖屏显示模式。这一改变对于开发者来说尤为有用,因为它可以帮助他们在进行应用程序测试和调试时获得更佳的视觉体验。此外,对于那些想要在电脑上使用...

    android竖屏切换横屏

    针对"android竖屏切换横屏"这一主题,我们主要探讨如何在基于MediaTek (MTK) 平台的手机上实现屏幕方向的切换,将默认的竖屏显示转变为横屏模式。 首先,Android系统提供了两种主要的屏幕方向:Portrait(竖屏)和...

    ZXing Android二维码/条码扫描,2020Android Studio版本,横竖屏都支持

    ZXing(Zebra Crossing)是Google开发的一个开源...通过合理地集成和配置,开发者可以快速地在自己的应用中加入这一实用功能,而横竖屏的支持则让用户体验更加友好。结合ZXingDemo,学习和实践会变得更加直观和高效。

    Android 简单例子:横屏 竖屏切换.rar

    本实例主要探讨如何在Android应用中实现在横屏和竖屏之间的自由切换,以及如何检测屏幕方向的变化。 首先,Android系统提供了两种基本的屏幕方向:横屏(Landscape)和竖屏(Portrait)。默认情况下,Android应用会...

    uniapp中设置横屏竖屏

    2. 系统自动旋转:大多数设备允许用户自由旋转屏幕,根据设备的物理位置自动切换横竖屏。 3. 程序锁定:开发者可以通过代码控制应用仅支持特定的方向,如始终竖屏或始终横屏,或者在特定页面中切换方向。 二、uni-...

    Android禁止横屏竖屏切换的有效方法

    在Android中要让一个程序的界面始终保持一个方向,不随手机方向转动而变化的办法: 只要在AndroidManifest.xml里面配置一下就可以了。  在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入...

    android 摄像头、视频录制demo (竖屏)

    以下是对这个“android 摄像头、视频录制demo (竖屏)”的详细解释: 1. **摄像头预览布局**: - 在Android中,摄像头预览通常通过`SurfaceView`或`TextureView`来实现。在这个示例中,重点在于如何让预览画面保持...

    android二维码扫描竖屏,横屏(竖屏简化代码,横屏google源码)

    本篇将详细解析标题和描述中提到的"android二维码扫描竖屏,横屏"的相关知识点,包括竖屏简化版和横屏Google源码的应用。 1. **二维码扫描原理** 二维码扫描主要依赖于二维码解码库,例如ZXing(Zebra Crossing)库...

    JS 判断ipad android 等移动设备横竖屏代码 源码

    ### JS 判断iPad、Android等移动设备横竖屏的知识点 #### 一、概述 本文将详细介绍如何通过JavaScript(简称JS)来判断iPad、Android等移动设备当前处于横屏还是竖屏状态。此方法适用于Web应用开发场景下,对用户...

    android二维码横屏竖屏

    在Android平台上,开发一款支持二维码扫描的应用时,通常会遇到横屏和竖屏两种设备方向的问题。本主题主要探讨如何在Android应用中处理这两种屏幕方向,确保二维码扫描功能的正常运行。 首先,Android系统允许应用...

    android4.4 kk 电量图标横屏和竖屏

    在Android 4.4(KitKat,简称KK)版本中,系统为用户提供了一种优化的体验,包括针对不同屏幕方向(横屏和竖屏)的定制电池图标。这个问题涉及到Android的UI设计、资源管理和屏幕适配。 首先,我们来看"android4.4 ...

Global site tag (gtag.js) - Google Analytics