精华内容
下载资源
问答
  • android 横竖屏切换布局
    2021-06-03 08:18:49

    盒子上有朋友遇到的问题,好心人给出的答案,转贴至此,学习了。以下为全文:

    问题:

    用D10运行

    Application.FormFactor.Orientations:=[TFormOrientation.soLandscape,TFormOrientation.soInvertedLandscape];

    在安卓6.0.1上(MIUI系统)就闪退了(好像5.0也会闪退),怎么办

    PS:手机是小米4 电信4G版

    答案:

    在androidManifest.template.xml里,activity项添加:

    android:configChanges="orientation|keyboard|keyboardHidden|screenSize" 试试,之前我也是遇到此类问题,如此解决。

    参考:

    android:configChanges属性

    对android:configChanges属性,一般认为有以下几点:

    1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

    2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

    3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

    但 是,自从Android 3.2(API

    13),在设置Activity的android:configChanges="orientation|keyboardHidden"后,还是一样

    会重新调用各个生命周期的。因为screen

    size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和

    TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation",

    你还必须设置"ScreenSize"。

    解决方法:

    AndroidManifest.xml中设置android:configChanges="orientation|screenSize“

    更多相关内容
  • 目前一般情况下 在横竖屏情况下 我们会遇到一些问题 例如横竖屏显示ui 比例问题 还有activity重启问题 今天说三个问题 一是横竖屏切换 二是 禁止屏幕旋转说一下屏幕切换时 的activity 生命周期onPause()—->...

    目前一般情况下 在横竖屏情况下 我们会遇到一些问题 例如横竖屏显示ui 比例问题 还有activity重启问题 今天说三个问题 一是横竖屏切换 二是 禁止屏幕旋转

    说一下屏幕切换时 的activity 生命周期

    onPause()—->onDestroy()—–>onCreate()

    先说第一个 横竖屏切换 一般的套路如下

    在manifast.xml 中 给当前activity配置 防止activity在屏幕切换时 activity 重建问题

    android:configChanges="orientation|keyboardHidden|screenSize"

    获取屏幕方向

    int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) {

    setContentView(R.layout.horizontallayout);        } else if (orientation == Configuration.ORIENTATION_PORTRAIT) {

    setContentView(R.layout.verticallayout);}

    监听屏幕方向 并处理数据

    @Override public void onConfigurationChanged(Configuration newConfig) {

    // 处理你的数据        super.onConfigurationChanged(newConfig);

    }

    二 禁止屏幕旋转

    第一 要先设置屏幕方向

    manifast.xml 设置给activity屏幕方向

    android:screenOrientation="portrait"// 设置竖屏android:configChanges="orientation|keyboardHidden|screenSize"// 防止activity 重建

    在java 代码中设置

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    二者选一即可

    第二  为了防止用户开启了屏幕切换权限 进行屏幕监听

    @Override    public void onConfigurationChanged(Configuration newConfig) {

    // 进行数据处理        super.onConfigurationChanged(newConfig);

    }

    第三  保存数据 防止activity 被销毁重建 进行数据处理

    @Override    protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    // 保存数据    }

    或者在onpush 方法中保存

    在oncreate() 方法中获取数据 进行设置即可

    注意 此处会有一个问题 就是 当客户开启了屏幕旋转的权限时 横屏启动时可能会出现闪退 情况

    先说一下 我们的app 启动 app 启动默认的竖屏启动的 但是如果在启动过程中 app 感应到重力发生变化 activity 就会发生改变 无论你有没有设置方向 而此时就有可能删除 这是数据问题 异常自己捕获就好了

    展开全文
  • Android 横竖屏切换加载不同的布局

    千次阅读 2021-05-28 08:27:30
    横屏竖屏在配置文件中的设置,之前已经说过。...缺省状态下,Activity每次横竖屏切换(包括用setRequestedOrientation调用)都会重新调用一轮onPause-> onStop-> onDestory-> onCreate->onStart->onRes...

    横屏竖屏在配置文件中的设置,之前已经说过。那么现在主要是说,切换之后由于屏幕宽高尺寸的改变,因此需要重新设置一个布局文件以适应现在的新的尺寸。

    缺省状态下,Activity每次横竖屏切换(包括用setRequestedOrientation调用)都会重新调用一轮onPause-> onStop-> onDestory-> onCreate->onStart->onResume操作,从而销毁原来的Activity对象,创建新的Activity对象,这是因为通常情况下软件在横竖屏之间切换,界面的高宽会发生转换,从而可能会要求不同的布局。具体的布局切换可以通过如下两种方法来实现:

    1.直接新建两个布局文件,剩下的就什么也不用管了:右键单击‘res’文件夹  -> 'new'  ->  'Android resource directory'; 将 Directory name 填写 layout-land,Resource type 选择layout,这是建立了一个横屏的布局文件,同样的方式再建立一个layout-port资源文件夹,里面放一个竖屏的布局文件,名字要起一样的,这个很重要,然后再java文件中设置setvontentview就行 了。这样屏幕切换的时候他们会被自动加载

    86608d56761895dd815957caca1bc40e.png

    c70326fa98b6f4427e2afe63eb46eb27.png

    2.假如布局资源是不一样又不按照如上设置,则需要通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件(比如mainP为竖屏mainL为横屏)。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout xml。

    首先在layout下,建立两个布局文件,一个是横屏的一个是竖屏的,然后再java文件中布置这两个文件就行了。

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    int orientation = getResources().getConfiguration().orientation;

    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {

    setContentView(R.layout.land);

    } else if (orientation == Configuration.ORIENTATION_PORTRAIT) {

    setContentView(R.layout.port);

    }

    //接下来,就可以做一些初始化等操作了

    }上面这两种方式实现对于横竖屏的切换加载不同的布局文件,都会让activity重新加载一次,那么必然就会导致数据的丢失或者是数据的重新获取,造成了过多的额外的功耗,那么我们可以在翻转之前保存一下现在已经获取到的数据,那么在翻转之后就可以直接使用,而不需要重新获取或者重新加载,具体在下面看重写Activity.onRetainNonConfigurationInstance(),用户横竖屏切换前保存数据

    @Override

    public Object onRetainNonConfigurationInstance() {

    final MyDataObject data = collectMyLoadedData();

    return data;

    }

    在onCreate()函数中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();

    if (data == null) {

    data = loadMyData();

    }

    ...

    }

    到这个地方,可能有人还会问,我就是同一个activity为什么切换个横竖屏一定要重新加载,我不想重新加载有没有办法呢,有的,需要拦截,具体如下:

    首先需要配置文件中做点属性的配置

    Andorid 3.2以前的SDK可以使用如下配置

    android:configChanges="orientation|keyboardHidden"

    而Adnroid 3.2以后的SDK必须添加一个screenSize属性,具体如下

    android:configChanges="keyboardHidden|orientation|screenSize"

    或者

    android:configChanges="orientation|screenSize"

    然后重写activity中onConfigurationChanged 方法,这里也分为三种情况:

    //1.布局分别在layout-land和layout-port目录中的同名main.xml时,就是上面说的第一种情况

    @Override

    public void onConfigurationChanged (Configuration newConfig){

    super.onConfigurationChanged(newConfig);

    setContentView(R.layout.main);

    //注意,这里删除了init(),否则又初始化了,状态就丢失

    findViews();

    setListensers();

    }

    //布局为不按照layout-land和layout-port目录,而自定义名字时

    @Override

    public void onConfigurationChanged (Configuration newConfig){

    super.onConfigurationChanged(newConfig);

    int mCurrentOrientation = getResources().getConfiguration().orientation;

    if ( mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT ) {

    // If current screen is portrait

    setContentView(R.layout.mainP);

    //注意,这里删除了init(),否则又初始化了,状态就丢失

    findViews();

    setListensers();

    } else if ( mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE ) {

    //If current screen is landscape

    setContentView(R.layout.mainL);

    //注意,这里删除了init(),否则又初始化了,状态就丢失

    findViews();

    setListensers();

    }

    }

    当然有时候连布局都不用更改的话,就可以直接对原有控件进行调用操作了,比如:

    public class MainActivity extends Activity {

    private TextView textView;

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    Log.i("--Main--", "onCreate");

    textView=(TextView)findViewById(R.id.tv_id);

    }

    @Override

    public void onConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);

    Log.i("--Main--", "onConfigurationChanged");

    if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){

    textView.setText("当前屏幕为横屏");

    }else{

    textView.setText("当前屏幕为竖屏");

    }

    }

    }

    展开全文
  • 部分网友会发现Activity在切换到后台或布局从横LANDSCAPE切换到PORTRAIT,会重新切换Activity会触发一次onCreate方法,使用其他的方法同样可以实现
  • 本文为大家分享了Android横竖屏切换及其对应布局加载问题,供大家参考,具体内容如下 第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。...
  • Android 横竖屏切换总结

    千次阅读 2021-06-13 03:38:28
    一.Android切换横竖屏应用的横竖屏设置应用的横竖屏设置主要是通过Activity的screenOrientation属性控制,属性值如下:主要有以下两种方式设置screenOrientation属性值静态设置,即在Mainfest文件中配置...

    一.Android切换横竖屏

    应用的横竖屏设置

    应用的横竖屏设置主要是通过Activity的screenOrientation属性控制,属性值如下:

    52aa3a2c0417

    主要有以下两种方式设置screenOrientation属性值

    静态设置,即在Mainfest文件中配置screenOrientation属性

    动态设置,即调用Activity的setRequestedOrientation(@ActivityInfo.ScreenOrientation int requestedOrientation)方法设置screenOrientation属性值

    以上两种方法,均可以通过改变screenOrientation属性值的方式配置屏幕方向属性,人为的限制屏幕可自动选择或者锁定横竖屏。只不过动态设置可以通过动态的改变屏幕方向属性值的方式,从而动态的设置屏幕方向

    系统的横竖屏设置

    系统横竖屏设置可以设置自动旋转(即应用界面根据系统自动旋转)或者锁定某一方向的屏幕

    以三星手机为例:

    52aa3a2c0417

    自动旋转

    52aa3a2c0417

    锁定竖屏

    综上,系统的设置和应用的属性共同控制了屏幕的横竖展示。

    这里做了个简单的表格,列出一些常用系统横竖屏和应用横竖屏混合设置结果(自动旋转代表会根据手机设备的旋转而旋转):

    screenOrientation属性值

    default

    sensor

    protrait

    landscape

    系统自动旋转

    自动旋转

    自动旋转

    锁定竖屏

    锁定横屏

    系统锁定竖屏

    锁定竖屏

    自动旋转

    锁定竖屏

    锁定横屏

    总结:根据实际测试的结果可知,应用的属性约束优先级要大于系统设置的约束,只有应用属性screenOrientation属性值为默认值时(不设置),应用的横竖屏才受系统自动旋转设置约束。只要screenOrientation属性值不为默认值,应用界面的横竖屏切换只受当前Activity的screenOrientation属性控制。

    二.Android横竖屏切换Activity生命周期

    关于Android横竖屏切换Activity是否会销毁重建,这个由Activity的configChanges属性控制。当一个配置改变时Activity默认会销毁重建,但是如果这个属性声明了此项配置后,Activit就不会销毁重建,而是回调Activity的onConfigurationChanged方法。

    configChanges的可配置属性如下:

    52aa3a2c0417

    横竖屏切换 - Activity销毁重建

    对于android3.2(API13)及以后的系统,以下任意一种配置,横竖屏切换Activity的生命周期都会重新执行一次

    (备注:关于部分资料说的不配置orientation属性切换竖屏会执行两次的结论,我在4.0之后的手机上测试都是只执行一次,不知道之前版本的系统是不是这样,待验证)

    不配置configChanges属性

    设置android:configChanges="orientation"

    设置android:configChanges="orientation|keyboardHidden"(3.2系统之前的系统不会执行生命周期方法了)

    实测结果:

    52aa3a2c0417

    可见以上三种配置,横竖屏切换时Activity均会销毁重建,Activity的生命周期都会重新执行一次

    横竖屏切换 - Activity不销毁重建

    配置android:configChanges="orientation|keyboardHidden|screenSize"可以控制Activity在横竖屏切换时不销毁重建

    实测结果:

    @Override

    public void onConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);

    int orientation = newConfig.orientation;

    if (orientation == ORIENTATION_LANDSCAPE){

    Log.i(TAG, "-------------横屏-------------");

    }else {

    Log.i(TAG, "-------------竖屏-------------");

    }

    Log.i(TAG, "onConfigurationChanged: "+orientation);

    }

    52aa3a2c0417

    可见配置了android:configChanges="orientation|keyboardHidden|screenSize"横竖屏切换时Activity不会销毁重建,而是会回调Activity的onConfigurationChanged方法。这里需要注意的是,第一次切换时onConfigurationChanged方法会回调两次

    总结:在遇到Android横竖屏切换的问题时,我们需要解决的问题主要有两个,布局的变化和数据的存储恢复。可以综合以上的属性设置达到最终自己想要的效果。

    ·

    展开全文
  • 横竖屏切换连带载入多屏布局问题:假设要让软件在横竖屏之间切换。因为横竖屏的高宽会发生转换,有可能会要求不同的布局。能够通过下面两种方法来切换布局:1)在res文件夹下建立layout-land和layout-port文件夹,对应...
  • 即销毁当前,然后重新创建首先,很多软件在设计和开发中为了避免横竖屏切换时引发不必要的麻烦,通常需要让App禁止掉横竖屏的切换,这就需要通过在AndroidManifest.xml中设置activity中的android:screenOrientation...
  • 拿Fragment记录,在OnCreateView中: int orientation = getResources().getConfiguration().orientation; int layout = 0; if (orientation == Configuration.ORIENTATION_PORTRAIT) { layout = R.layout....
  • Android横竖屏切换时,当前的Activity会被销毁,然后Activity上面的数据将会全部丢失。如Listview上面每个item的checkbox,横竖屏切换时,复选框就丢失所有选中信息。解决方案1:在Androidmanifest.xml的activity...
  • 主要介绍了Android横竖屏切换的相关技巧,结合实例形式总结分析了Android禁止及设置横竖屏切换、修改切换布局及拦截切换等相关技巧,需要的朋友可以参考下
  • 安卓横竖屏切换改变布局文件1 开启安卓的自动旋转,在改变方向后,自动更改布局文件,其中activity会重启,数据不会保存,需要后面进行数据保存恢复 在AndroidManifest添加 android:configChanges="keyboardHidden|...
  • 1.横竖屏切换 Activity 在 AndroidManifest.xml 中申明 ...2.横竖屏切换时如果两种情况布局不一样,在 layout-land 文件夹下复制竖屏下 Activity 布局进行修改,布局名字一定要相同,布局中控件的 id 也要相同,位置可
  • 主要介绍了android 屏幕横竖切换详解的相关资料,需要的朋友可以参考下
  • 我已阅读并理解错误报告你做了什么?...2.将PickerActivity 注册到宿主app AndroidManifest.xml 中,并添加属性android:configChanges="orientation|keyboardHidden|screenSize"在app.mine模块Picker...
  • 在做android 开发时,在默认情况下当屏幕从竖评变到横时会触发 onConfigurationChanged 事件 在默认情况下会重新加载画面并显示和横评一样的画面,这样会有2个问题,布局问题,在竖 显示的布局到横中由于宽和...
  • 这几年一直在做手机上和电视盒的App,几乎没有考虑过横竖屏切换的问题。电视盒好说,横屏不变,你要是给它设计个竖屏人家也没机会使;而手机上的应用就不好说了,有些界面你设计了横竖屏兼容可能是为了表示你的功能...
  • Android横竖屏切换

    2021-05-06 15:22:33
    port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局。...
  • Android 横竖屏切换

    2021-10-30 16:33:45
    Android横竖屏要解决的问题应该就两个: ①布局问题 ②重新载入问题 1.布局问题 ①如果不想让app在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:...
  • 1、创建两个FragmentActivity 让它继承 Fragment ,这里最低版本为11package ...import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import andr...
  • Android横竖屏切换适配方案

    千次阅读 2021-06-06 16:13:44
    Android横竖屏切换适配方案时间:2017-04-21来源:Android开发学习网今天为大家讲解一下Android中横竖屏切换的一些知识。Android横竖屏切换适配,一般开发都以竖屏为默认配置,这里也以竖屏UI为前提。1.直接简单的,...
  • fragment1.xmlandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#ff0000"android:orientation="vertical" >android:layout_width="wrap_content"android:layout_hei...
  • Android横竖屏切换布局不正常的问题

    千次阅读 2011-03-08 22:56:00
     起因:   在垂直方向启动应用程序时候,横竖屏切换正常,但是在横屏启动程序时,Layout载入正常,但是绘图部分不正常,即横屏显示的是竖屏的布局,切换后竖屏是横屏的布局。  解决:  ...
  • (当然前提是横竖屏切换,位置改变的view数量没有很多)。如果横竖屏UE效果显示差别大的话,在横竖屏切换的时候,需要重新加载新xml文件。但是Fragment不能像Activity一样直接setContentView(),Fragment横竖屏切换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,265
精华内容 3,306
热门标签
关键字:

android 横竖屏切换布局