android屏幕方向

Siv*_*n.r 20 android orientation

我试图getOrientation()获取方向值,但它总是返回0!

rgr*_*_mt 46

不推荐使用getOrientation(),但这不一定是问题的根源.确实,您应该使用getRotation()而不是getOrientation(), 但是如果您的目标是Android 2.2(API级别8)或更高级别,则只能使用它.有些人甚至Google员工有时似乎忘记了这一点.

举个例子,我的HTC渴望运行Android 2.2.getOrientation()getRotation()都报告相同的值:

  • 0(默认为肖像),
  • 1(装置逆时针旋转90度),
  • 3(设备顺时针90度)

当你把它"放在头上"时它不报告(旋转180,这将是值2).该结果可能是特定于设备的.

首先,如果您使用模拟器或设备,则应明确说明.你知道如何旋转模拟器吗?然后我建议使用onCreate()方法创建一个小测试程序,如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    Display mDisplay = mWindowManager.getDefaultDisplay();

    Log.d("ORIENTATION_TEST", "getOrientation(): " + mDisplay.getOrientation());

}
Run Code Online (Sandbox Code Playgroud)

检查设备的屏幕是否已锁定在设备设置 设置>显示>自动旋转屏幕中.如果取消选中该复选框,Android将不会向您的活动报告方向更改.要明确:它不会重新启动活动.在我的情况下,我只得到0,就像你描述的那样.

如果将这些行添加到onCreate(),可以从程序中检查

int sysAutoRotate = 0;
try {
        sysAutoRotate = Settings.System.getInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION);
    } catch (SettingNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
Log.d("ORIENTATION_TEST", "Auto-rotate Screen from Device Settings:" + sysAutoRotate);
Run Code Online (Sandbox Code Playgroud)

如果自动旋转关闭则返回0,如果启用自动旋转则返回1.另一个尝试.在您的原始程序中,您可能已在清单中设置

android:screenOrientation="portrait"
Run Code Online (Sandbox Code Playgroud)

效果相同,但这次只针对您的活动.如果您制作了小型测试程序,这种可能性就会被消除(这就是我推荐它的原因).

备注:是的,整个方向/轮换主题确实是一个"有趣"的主题.尝试一下,使用Log.d(),实验,学习.


Kev*_*oil 37

如果您想知道当前显示的内容是横向模式还是纵向(可能完全独立于手机的物理旋转),您可以使用:

getResources().getConfiguration().orientation

开发者文档

public int orientation
自:API Level 1

屏幕的整体方向.可以是ORIENTATION_LANDSCAPE,ORIENTATION_PORTRAIT或ORIENTATION_SQUARE之一.


sah*_*hhm 5

getOrientation()已弃用.相反,试试吧getRotation().