我试图暂时锁定Android设备的方向,大多数情况下它会随着传感器的变化而变化.所以我想要做的是弄清楚当前的方向(横向,反向横向,纵向,反向肖像)是什么,将方向更改为该方向,然后将其更改回原来的方向.
我知道我可以使用诸如int orientation = this.getResources().getConfiguration().orientation等代码.this.setRequestedOrientation(取向); 这个问题通常是所讨论的方向被设置为"未定义"或者可能是"用户"或"传感器",这对我没有帮助.如何找出屏幕四个可能的哪一侧"向下"?
我知道getRotation(),如下所述:如何检测android设备的方向?
问题是我可以从设备的"自然"方向找出实际旋转(0度,90度,180度,270度)......但如果我不知道原始方向是什么,这对我没有帮助是.
如何找出设备的转向方式,以便暂时将设备固定到该方向?
不,这不是一个重复的问题.我怀疑在不同的设备上可能会有不同的行为,但不能确定.我做了更多的实验和研究.我原因认为getConfiguration().orientation返回"未指定".我误解了.它确实返回横向或纵向.
但这是问题所在.直到Gingerbread(2.3,API 9)才添加了REVERSE风景和逆向肖像.
因此,如果设备处于反向横向模式,例如,getConfiguration.orientation会告诉我它处于横向模式.然后,当我将所请求的方向设置为landscape-bam时,屏幕会颠倒翻转.
我没有意识到这在Froyo中更难,所以我将重新解释我之前拼写的问题:
在Froyo中,如何检测设备是横向,反向横向,纵向还是反向纵向?
建议列出所有工作 - 姜饼或更高.
我在另一篇文章中修改了diyism的答案,为Froyo工作.由于Froyo不支持reverse_landscape,它将显示为颠倒但在您解锁后将返回正确的方向.在Gingerbread中,以后它应该没有问题.
不是一个完美的解决方案,但足以满足我的需求.
public static void disableRotation(Activity activity)
{
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = activity.getWindowManager().getDefaultDisplay().getOrientation();
// Copied from Android docs, since we don't have these values in Froyo 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)
{
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
{
if (orientation == Configuration.ORIENTATION_PORTRAIT)
{
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE)
{
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270)
{
if (orientation == Configuration.ORIENTATION_PORTRAIT)
{
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE)
{
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
public static void enableRotation(Activity activity)
{
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2988 次 |
| 最近记录: |