Android设备的默认横屏是顺时针90度,如何修改顺时针270度,即是逆时针90度。

1.系统全局修改(涉及源码)

1.查看相关逻辑,可以看到有个布尔值com.android.internal.R.bool.config_reverseDefaultRotation控制翻转:

frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

  @Override    public void setInitialDisplaySize(Display display, int width, int height, int density) {        // This method might be called before the policy has been fully initialized        // or for other displays we don't care about.        if (mContext == null || display.getDisplayId() != Display.DEFAULT_DISPLAY) {            return;        }        mDisplay = display;        final Resources res = mContext.getResources();        int shortSize, longSize;        if (width > height) {            shortSize = height;            longSize = width;            mLandscapeRotation = Surface.ROTATION_0;            mSeascapeRotation = Surface.ROTATION_180;            if (res.getBoolean(com.android.internal.R.bool.config_reverseDefaultRotation)) {                mPortraitRotation = Surface.ROTATION_90;                mUpsideDownRotation = Surface.ROTATION_270;            } else {                mPortraitRotation = Surface.ROTATION_270;                mUpsideDownRotation = Surface.ROTATION_90;            }        } else {            shortSize = width;            longSize = height;            mPortraitRotation = Surface.ROTATION_0;            mUpsideDownRotation = Surface.ROTATION_180;            if (res.getBoolean(com.android.internal.R.bool.config_reverseDefaultRotation)) {                mLandscapeRotation = Surface.ROTATION_270;                mSeascapeRotation = Surface.ROTATION_90;            } else {                mLandscapeRotation = Surface.ROTATION_90;                mSeascapeRotation = Surface.ROTATION_270;            }        }        mStatusBarHeight =                res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height);        // Height of the navigation bar when presented horizontally at bottom        mNavigationBarHeightForRotation[mPortraitRotation] =        mNavigationBarHeightForRotation[mUpsideDownRotation] =                res.getDimensionPixelSize(com.android.internal.R.dimen.navigation_bar_height);        mNavigationBarHeightForRotation[mLandscapeRotation] =        mNavigationBarHeightForRotation[mSeascapeRotation] = res.getDimensionPixelSize(                com.android.internal.R.dimen.navigation_bar_height_landscape);        // Width of the navigation bar when presented vertically along one side        mNavigationBarWidthForRotation[mPortraitRotation] =        mNavigationBarWidthForRotation[mUpsideDownRotation] =        mNavigationBarWidthForRotation[mLandscapeRotation] =        mNavigationBarWidthForRotation[mSeascapeRotation] =                res.getDimensionPixelSize(com.android.internal.R.dimen.navigation_bar_width);        // SystemUI (status bar) layout policy        int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / density;        int longSizeDp = longSize * DisplayMetrics.DENSITY_DEFAULT / density;        // Allow the navigation bar to move on small devices (phones).                /// M: read the critical dp from mtk resource @{        //mNavigationBarCanMove = shortSizeDp < 600;        mNavigationBarCanMove = shortSizeDp < mContext.getResources().getInteger(            com.mediatek.internal.R.integer.config_dp_for_rotation);        /// @}        mHasNavigationBar = res.getBoolean(com.android.internal.R.bool.config_showNavigationBar);        /// M:[SmartBook]Don't show navigation bar if SmartBook plugged in @{        if (FeatureOption.MTK_SMARTBOOK_SUPPORT) {            mNavigationBarCanMove = false;            mHasNavigationBar = mSmartBookPlugIn ? false : mContext.getResources().getBoolean(                com.android.internal.R.bool.config_showNavigationBar);            Slog.d(TAG, "mSmartBookPlugIn:" + mSmartBookPlugIn + ", mHasNavigationBar:" + mHasNavigationBar);        }        /// @}        // Allow a system property to override this. Used by the emulator.        // See also hasNavigationBar().        String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");        if ("1".equals(navBarOverride)) {            mHasNavigationBar = false;        } else if ("0".equals(navBarOverride)) {            mHasNavigationBar = true;        }        // For demo purposes, allow the rotation of the HDMI display to be controlled.        // By default, HDMI locks rotation to landscape.        if ("portrait".equals(SystemProperties.get("persist.demo.hdmirotation"))) {            mDemoHdmiRotation = mPortraitRotation;        } else {            mDemoHdmiRotation = mLandscapeRotation;        }        mDemoHdmiRotationLock = SystemProperties.getBoolean("persist.demo.hdmirotationlock", false);        // Only force the default orientation if the screen is xlarge, at least 960dp x 720dp, per        // http://developer.android.com/guide/practices/screens_support.html#range        mForceDefaultOrientation = longSizeDp >= 960 && shortSizeDp >= 720 &&                res.getBoolean(com.android.internal.R.bool.config_forceDefaultOrientation) &&                // For debug purposes the next line turns this feature off with:                // $ adb shell setprop config.override_forced_orient true                // $ adb shell wm size reset                !"true".equals(SystemProperties.get("config.override_forced_orient"));    }


修改:frameworks/base/core/res/res/values/config.xml

    true


2.应用中修改

在对应的Activity中设置orientation为reverseLandscape就可以了。



转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui 

更多相关文章

  1. 修改Button的样式!
  2. 修改air for android Manifest.xml下默认的screenOrientation
  3. 修改android virtual device路径
  4. 14条Android(安卓)Studio常用的的配置
  5. android中使用OpenCV之调用设备摄像头
  6. android中使用OpenCV之调用设备摄像头
  7. android 之button 屏幕翻转
  8. android tabhost --android UI 学习
  9. android p cts CtsCameraTestCases fail

随机推荐

  1. android 常用布局有哪些
  2. Android工程导入时常见的错误解决方法
  3. Android ellipsize属性(多余文字用省略号
  4. android限制文本长度
  5. android ListView 示例1 entries 指定一
  6. Android:解决ListView按下后上下滑动背景
  7. Android studio was unable to find a va
  8. Android 使用iperf测试wifi吞吐量
  9. 二、 Android中gravity与layout_gravity
  10. Linux下Android(安卓)ADB驱动安装详解