精华内容
下载资源
问答
  • 手机怎么能自动旋转屏幕了?

    千次阅读 2016-12-21 13:59:35
    有的手机需要开启自动旋转,比如360;设置–>屏幕和亮度–>开启自动旋转

    有的手机需要开启自动旋转,比如360;设置–>屏幕和亮度–>开启自动旋转

    展开全文
  • 换句话说,当苹果手机屏幕旋转页面重新加载之后,问题就出现了。 在安卓和谷歌浏览器上正常显示的页面,在苹果手机上出岔子了。具体问题:当页面旋转后,根据父容器的高度更改一个元素的高度,代码执行了,但是...

        换句话说,当苹果手机屏幕旋转页面重新加载之后,问题就出现了。

        在安卓和谷歌浏览器上正常显示的页面,在苹果手机上出岔子了。具体问题:当页面旋转后,根据父容器的高度更改一个元素的高度,代码执行了,但是没有预期的效果。

        现在想来,没有想到页面旋转后会重新加载页面,是导致后续很久定位不到问题关键所在。

        问题的定位过程:1.获取父容器和子容器,页面旋转后打印高度。发现打印的高度是页面旋转之前的高度,而不是页面旋转之后的高度。猜测:代码执行时页面还没加载好,dom还没全部生成。遂放在页面结构加载完后取值,但还是这样。偶然想到可能是屏幕旋转后重新加载了。百度后才搞明白。

    页面加载后,html,css和js同时解析,我的js代码在页面旋转后立即执行,必然快于html.css的解析速度,当js取值时,元素的高度还没有变化。所以才有问题定位时的现象。最后是页面加载后延迟0.4秒执行,预期的效果就出来了。

    几个小点:

    1.angular获取dom

    2.angular操作dom

    3.代码重构

    1.html:

    <div #videoParent></div>

    2.ts

    @ViewChild("video1") videoParent: ElementRef;

    let videoNative=this.videoParent.natveElement;

    2.操作dom

    render2或者直接.style.setProperty()

    3.代码重构

    之前尝试解决问题时,添加了很多代码,且逻辑混乱,复杂, 功能也没有分离。导致一个方法非常难看。遂将可分离和重复部分分离,分装成单独函数。分离之后后续代码维护和可靠性都好了很多。

    展开全文
  • 在调用了setRequestedOrientation之后,手机屏幕旋转不触发onConfigurationChanged方法,这个时候需要再调用一次
    在调用了setRequestedOrientation之后,手机屏幕的旋转不触发onConfigurationChanged方法,这个时候需要再调用一次
    

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);方法,让他开启自动旋转事件


    如代码:

    	/**
         * 开启监听器
         */
        private final void startListener() {
            mOrientationListener = new OrientationEventListener(this) {
                @Override
                public void onOrientationChanged(int rotation) {
    
                	if (startRotation == -2) {//初始化角度
    					startRotation = rotation;
    				}
                	//变化角度大于30时,开启自动旋转,并关闭监听
                	int r = Math.abs(startRotation - rotation);
                	r = r > 180 ? 360 - r : r;
                	if (r > 30) {
                		//开启自动旋转,响应屏幕旋转事件
                		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
                		this.disable();
    				}
                }
            };
        }
    	


    在手动旋转按钮监听事件中写下

    			//设置完之后变成强制设定为横屏或纵屏,如同AndroidManifest.xml中设置了android:screenOrientation
    			if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
    				setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    			}else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    				setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    			}
    			//2秒后开启屏幕旋转监听,用来开启自动旋转,响应屏幕旋转事件
    			orientationHandler.sendEmptyMessageDelayed(0, 2000);


    最后设置handler

    	private OrientationEventListener mOrientationListener; // 屏幕方向改变监听器
    	private int startRotation;
    	Handler orientationHandler = new Handler(){
    		public void handleMessage(Message msg) {
    			startRotation = -2;
    			mOrientationListener.enable();
    		};
    	};


    展开全文
  • 原文: Android 解决setRequestedOrientation之后手机屏幕旋转不触发onConfigurationChanged方法 最近在做播放器的时候遇到一个问题,在屏幕方向改变之后需要切换播放器全屏/非全屏的时候,在重写了...

    原文: Android 解决setRequestedOrientation之后手机屏幕的旋转不触发onConfigurationChanged方法



    最近在做播放器的时候遇到一个问题,在屏幕方向改变之后需要切换播放器全屏/非全屏的时候,在重写了onConfigurationChanged方法并在manifest.xml配置文件中添加

    1. android:screenOrientation="sensor"
    2. android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"

    之后,在屏幕方向改变之后确实切换了播放器的方向,但是在我的程序中,需要一个播放器控制按钮,当用户点击按钮时手动切换播放器方向(即播放器全屏/小屏状态切换)和屏幕方向改变时自动切换两个功能并存;最开始想的是直接使用setRequestedOrientation()设置屏幕方向应该就OK了,但是发现这样做是行不通的.之后了解到因为setRequestedOrientation设置屏幕方向之后,比如说setRequestedOrientation(portrait)方法,就设定了屏幕方向是portrait,和在清单文件中配置android:screenOrientation="portrait"是同等的效果;也即不再响应屏幕方向改变,只支持portrait方向;

      言归正转,说我的处理方法,android给我们提供了OrientationEventListener,从字面意思就知道是干什么用的;这个监听器有一个onOrientationChanged(int rotation)方法会将当前屏幕旋转的度数返回给用户;

      先看持接口中方法返回的旋转度数的计算方法;

      

      上图中金色区域就是手机,角度就是绿线和红线之间的角度,顺时针旋转手机,角度增大,角度范围0-360;手机平放的角度为-1;

      下面分别是横屏和竖屏的界面,按钮即用于切换屏幕方向;

     

      再看看具体实现:

    1.声明变量

        private OrientationEventListener mOrientationListener; // 屏幕方向改变监听器
        private boolean mIsLand = false; // 是否是横屏
        private boolean mClick = false; // 是否点击
        private boolean mClickLand = true; // 点击进入横屏
        private boolean mClickPort = true; // 点击进入竖屏

     

    2.初始化监听器

    复制代码
        /**
         * 开启监听器
         */
        private final void startListener() {
            mOrientationListener = new OrientationEventListener(this) {
                @Override
                public void onOrientationChanged(int rotation) {
                    // 设置竖屏
                    if (((rotation >= 0) && (rotation <= 30)) || (rotation >= 330)) {
                        if (mClick) {
                            if (mIsLand && !mClickLand) {
                                return;
                            } else {
                                mClickPort = true;
                                mClick = false;
                                mIsLand = false;
                            }
                        } else {
                            if (mIsLand) {
                                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                                mIsLand = false;
                                mClick = false;
                            }
                        }
                    }
                    // 设置横屏
                    else if (((rotation >= 230) && (rotation <= 310))) {
                        if (mClick) {
                            if (!mIsLand && !mClickPort) {
                                return;
                            } else {
                                mClickLand = true;
                                mClick = false;
                                mIsLand = true;
                            }
                        } else {
                            if (!mIsLand) {
                                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                                mIsLand = true;
                                mClick = false;
                            }
                        }
                    }
                }
            };
            mOrientationListener.enable();
        }
    复制代码

    3.设置按钮点击切换屏幕方向响应事件

    复制代码
            mButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    mClick = true;
                    if (!mIsLand) {
                        if (onClickOrientationListener != null) {
                            onClickOrientationListener.landscape();
                        }
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                        mIsLand = true;
                        mClickLand = false;
                    } else {
                        if (onClickOrientationListener != null) {
                            onClickOrientationListener.portrait();
                        }
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                        mIsLand = false;
                        mClickPort = false;
                    }
                }
            });
    复制代码

    4.上面用到一个接口OnClickOrientationListener,里面包含两个方法,分别用于用户点击切换横屏/竖屏时的回调;

    interface OnClickOrientationListener {
      public void landscape();
      public void portrait();
    }

      代码贴完了, 简单说说思路,点击的时候,直接切换屏幕方向,切换之后,需要当手机屏幕也旋转到所切换的方向之后,才又开始监听手机屏幕旋转事件,这样就实现了setRequestedOrientation之后仍然可以通过旋转手机切换屏幕的功能;

      举个例子:
    -->手机当前是竖屏状态,Activity也是竖屏状态 
    -->用户点击切换按钮 
    -->Activity切换为横屏,手机为竖屏;此时通过设置flag,使OrientationListener监听到竖屏时不再处理事件,waiting... 
    -->直到当用户把手机旋转为横屏状态之后,更改flag,使OrientationListener监听到竖屏时处理相应的事件 
    -->当用户再次旋转手机切换为竖屏之后,Activity即可自动切换为竖屏;

    横屏点击切换竖屏理论同上;

      第三步,用户点击切换按钮之后进入横屏,此时就不响应监听到的竖屏处理事件,并且要等待到第四步用户把手机旋转为横屏状态之后再响应竖屏监听;这样定义似乎不太合理,但从用户的角度看,不可能用户点击了要进入横屏,却仍然把手机给竖屏方向拿着;

      最后,当不需要监听屏幕方向的时候,需要调用OrientationListener.disable()关闭监听器;

     

    小记录一下相关知识01/07/2014

    复制代码
        private int getScreenRotation() {
            WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
            Display display = wm.getDefaultDisplay();
            try {
                Method m = display.getClass().getDeclaredMethod("getRotation");
                return (Integer) m.invoke(display);
            } catch (Exception e) {
                return Surface.ROTATION_0;
            }
        }
    
        private int getScreenOrientation() {
            switch (getScreenRotation()) {
            case Surface.ROTATION_0:
                return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            case Surface.ROTATION_90:
                return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            case Surface.ROTATION_180:
                return (Build.VERSION.SDK_INT >= 8 ? ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
                        : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            case Surface.ROTATION_270:
                return (Build.VERSION.SDK_INT >= 8 ? ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
                        : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            default:
                return 0;
            }
        }
    复制代码

     


    展开全文
  • 当时面临的问题是,在旋转屏幕的时候需要让gridview的列数与宽度能自适应屏幕宽度,每个单元格之间还需要保留一定的间距。因为每款手机的屏幕宽度都相同,我们在指定了单元格的宽度与间距之后,并能确定每行中所...
  • 当时面临的问题是,在旋转屏幕的时候需要让gridview的列数与宽度能自适应屏幕宽度,每个单元格之间还需要保留一定的间距。因为每款手机的屏幕宽度都相同,我们在指定了单元格的宽度与间距之后,并能确定每行中所...
  • 在主配置文件里面。在需要设置的activity项后面加上 android:screenOrientation="portrait",这个activity就保持竖屏显示了;在每个activity项后面加上android:screenOrientation="portrait",整个应用就保持竖屏...
  • 在项目开发的过程中, 碰见了一个非常诡异的事情, 拍照之后的imageview能正常显示图片! 从而导致十行代码中间的几句代码执行, 执行, 执行 !... 这就诡异了(主要是测试手机不在我这里, ...
  • 自动旋转屏幕 ...因为一般只有开启了 自动旋转才会用到处理自动旋转屏幕这块的逻辑,而且和锁定屏幕方向的处理情况会太一样。 public class ScreenAutoRotationHelper { private OrientationEventListene
  • 最近在做播放器的时候遇到一个问题,在屏幕方向改变之后需要切换播放器全屏/非全屏的时候,在重写了onConfigurationChanged方法并在manifest.xml配置文件中添加 android:screenOrientation="sensor" android:...
  • 这些天在学习有关视频监控的项目,遇到最...在默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致当前activity发生onDestroy-> onCreate,这样会重新构造当前activity和界面布局,如果在Camera界面,则
  • Android屏幕旋转的问题

    2019-03-21 14:17:53
    刚实现了App内手机横/竖放置时,屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。 开门见山的说,实现屏幕自动/手动旋转的方式有两种: 一种是在工程的代码中定义,这种方式在横竖屏切换时执行的操作是:...
  • 熟悉android的人都知道,android系统的手机绝大部分只支持三种屏幕方向的重力感应自动切换,竖直,水平,反方向水平,独独支持反方向竖直的重力感应切换。我由于一次偶然刷系统刷到了cm,发现这个系统居然支持竖直...
  • Android 解决setRequestedOrientation之后手机屏幕旋转不触发onConfigurationChanged方法  最近在做播放器的时候遇到一个问题,在屏幕方向改变之后需要切换播放器全屏/非全屏的时候,在重写了...
  • Windows mobile屏幕旋转解决方案

    千次阅读 2010-04-02 09:35:00
    Windows mobile屏幕旋转解决方案 在默认情况下,Windows mobile的CDialog类可以自动切换屏幕显示方式,在用户把手机屏幕旋转成横屏的时候,CDialog类也会自动旋转,从而使得原本程序的绘制操作变乱。 那么如何解决...
  • 在默认情况下,windows mobile的CDialog类可以自动切换屏幕显示方式,在用户把手机屏幕旋转成横屏的时候,CDialog类也会自动旋转,从而使得原本程序的绘制操作变乱。那么如何解决Windows mobile下屏幕旋转带来的界面...
  • Android 屏幕旋转问题

    千次阅读 2014-09-28 09:55:48
    要让程序界面保持一个方向,手机方向转动而变化的处理办法:  在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation="landscape"。 例如(landscape是横向,portrait是纵向):...
  • Android 在横竖屏切换时,会摧毁后重新...2.在屏幕切换时,保存上一个屏幕上的数据,并传递到接下来的一个屏幕上;(我现在还明白这其中的意思,怕自己忘记而已) 先重写了savedInstanceState。使用键值对的方...
  • 工作中遇到这样一个需求,在当手机投影到airDrop设备时要跟投影的设备屏幕方向保持一致,用户锁定时也要随投影设备旋转,用户没有锁定时只随投影设备旋转,而能随手机旋转。 花了一上午时间,搞定了这个问题,...
  • 刚实现了App内手机横/竖放置时,屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。 开门见山的说,实现屏幕自动/手动旋转的方式有两种: 一种是在工程的代码中定义,这种方式在横竖屏切换时执行的操作是:...
  • Android屏幕旋转-横屏竖屏切换

    万次阅读 2018-03-12 19:26:32
    刚实现了App内手机横/竖放置时,屏幕横/竖屏的切换。记录一下中间需要的关键信息和实现过程。 开门见山的说,实现屏幕自动/手动旋转的方式有两种: 一种是在工程的代码中定义,这种方式在横竖屏切换时执行的操作...
  • 这篇文章主要是浅析一下activity的configChanges这个属性的,这个属性可能对于一些刚入门的Android开发者来说不是很常见,但是对于做过手机播放界面的同志们这个属性恐怕没人知道。大家都知道,当手机横竖屏切换时...
  • android 支付宝 H5支付 屏幕旋转支付信息丢失的解决办法 最近在提测,测试的小伙伴试了一下在支付完旋转屏幕,然后支付的东西就没了。 我一开始知道怎么样操作的,直到他发了小视频过来。然后我在我的手机上试了...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 243
精华内容 97
关键字:

手机旋转屏幕旋转不了