android源码横竖屏设置问题

昨天的遗忘
  • 4
新手上路,请多包涵

求大神帮忙贴一下android4.4.2源码怎么让系统默认横屏,禁止转换成竖屏

回复
阅读 3.1k
1 个回答

改变Android默认的横竖屏,修改源码一个地方就可以了。

public int rotationForOrientationLw(int orientation, int lastRotation,  
           boolean displayEnabled) {  
  
       if (mPortraitRotation < 0) {  
           // Initialize the rotation angles for each orientation once.  
           Display d = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))  
                   .getDefaultDisplay();  
           if (d.getWidth() > d.getHeight()) {  
               mPortraitRotation = Surface.ROTATION_90;  
               mLandscapeRotation = Surface.ROTATION_0;  
               mUpsideDownRotation = Surface.ROTATION_270;  
               mSeascapeRotation = Surface.ROTATION_180;  
           } else {  
               mPortraitRotation = Surface.ROTATION_0;  
               mLandscapeRotation = Surface.ROTATION_90;  
               mUpsideDownRotation = Surface.ROTATION_180;  
               mSeascapeRotation = Surface.ROTATION_270;  
           }  
       }  
  
    {  
        Log.i(TAG, "MediaPlayer.is not PlayingVideo");  
        synchronized (mLock) {  
            switch (orientation) {  
                case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:  
                    //always return portrait if orientation set to portrait  
                    //return mPortraitRotation;  
                    return mUpsideDownRotation;  
                case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:  
                    //always return landscape if orientation set to landscape  
                    return mLandscapeRotation;  
                case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:  
                    //always return portrait if orientation set to portrait  
                    //return mUpsideDownRotation;  
                    return mPortraitRotation;  
                case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE:  
                    //always return seascape if orientation set to reverse landscape  
                    return mSeascapeRotation;  
                case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:  
                    //return either landscape rotation based on the sensor  
                    mOrientationListener.setAllow180Rotation(  
                            isLandscapeOrSeascape(Surface.ROTATION_180));  
                    return getCurrentLandscapeRotation(lastRotation);  
                case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:  
                    mOrientationListener.setAllow180Rotation(  
                            !isLandscapeOrSeascape(Surface.ROTATION_180));  
                    return getCurrentPortraitRotation(lastRotation);  
            }  
  
            mOrientationListener.setAllow180Rotation(  
                   orientation == ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR  
                   || orientation == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);  
  
            // case for nosensor meaning ignore sensor and consider only lid  
            // or orientation sensor disabled  
            //or case.unspecified  
            if (mLidOpen) {  
                return mLidOpenRotation;  
            } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) {  
                return mCarDockRotation;  
            } else if (mDockMode == Intent.EXTRA_DOCK_STATE_DESK && mDeskDockRotation >= 0) {  
                return mDeskDockRotation;  
            } else {  
                if (useSensorForOrientationLp(orientation)) {  
                    return mOrientationListener.getCurrentRotation(lastRotation);  
                }  
                return Surface.ROTATION_0;  
            }  
        }  
}  

}

修改上面倒数一行代码把return Surface.ROTATION_0改为你要的方向,记得这个要和上面的匹配,宽高不同,Surface.ROTATION_0也不同。因为代码开头就有:

if (mPortraitRotation < 0) {  
    // Initialize the rotation angles for each orientation once.  
    Display d = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))  
            .getDefaultDisplay();  
    if (d.getWidth() > d.getHeight()) {  
        mPortraitRotation = Surface.ROTATION_90;  
        mLandscapeRotation = Surface.ROTATION_0;  
        mUpsideDownRotation = Surface.ROTATION_270;  
        mSeascapeRotation = Surface.ROTATION_180;  
    } else {  
        mPortraitRotation = Surface.ROTATION_0;  
        mLandscapeRotation = Surface.ROTATION_90;  
        mUpsideDownRotation = Surface.ROTATION_180;  
        mSeascapeRotation = Surface.ROTATION_270;  
    }  
}  

参考:http://blog.csdn.net/wh_19910...

宣传栏