默认的横屏角度是顺时针90度,修改为顺时针270度,即是逆时针90度。

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

原文:http://blog.csdn.net/zhoumushui/article/details/42922361

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐