检查手机方向是否改变而不改变布局

3
我想实现以下功能:
  1. 当我把手机横过来时,我想要启动一个活动。
  2. 当我再次把它竖过来时,我希望该活动再次关闭。
基本上,我想知道我的屏幕方向何时发生了变化,但不改变布局。这可能吗?

我会关注这个问题。我的一个小部件因为方向改变而没有更新,我有一个问题。我也想知道如何检测它。 - durbnpoisn
你想要在横屏模式下调用新的Activity,还是重新启动当前的Activity? - CRUSADER
@CRUSADER 我想调用一个新的活动。 - deimos1988
我认为你最好使用不同的布局来适应横屏。它可以与你的竖屏布局相同,但需要添加一个额外的片段。 - Karakuri
使用SensorManager来监听原始事件:https://dev59.com/0Wox5IYBdhLWcg3wtmc1#9022405 - Ken Wolf
2个回答

0

我不确定你在问什么,因为1和2并不等于你的最终问题。无论如何,你要找的答案是onConfigurationChanged。

如果你已经有一个正在运行的活动,你可以告诉Android在AndroidManfest中,你想处理旋转。然后重写onConfigurationChange来启动一个新的活动。在那个活动中,也告诉android你想处理配置更改,在ondconfigurationchange中,它可以调用finish()返回到上一个活动。

参见: Android Activity onConfigurationCjhanged

将此代码放入您的Android清单中以供活动使用:

<activity android:name=".MyActivity" android:label="@string/appName"
                android:configChanges="orientation|keyboard|keyboardHidden">

0

在此处查看Android开发者指南

以下清单代码声明了一个处理屏幕方向变化和键盘可用性变化的活动:

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden|screenSize"
          android:label="@string/app_name">

现在,当这些配置之一发生更改时,您的Activity不会重新启动。相反,您的Activity会收到一个调用onConfigurationChanged()的请求。
下面的onConfigurationChanged()实现检查当前设备的方向:
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
        //call new Activity here  
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

谢谢您的回复,但是如果我没有声明orientation="portrait",它是否仍然会改变布局呢? - deimos1988
你这个让我有点懵,你不想让你的布局变成横向吗? - CRUSADER
不,我只想检查方向并启动一个新的活动,仅此而已 :) - deimos1988
只需尝试上述提到的代码... 并告诉我们您面临的进一步问题... 由于您正在调用新的Activity.. 因此添加了此代码的先前活动将被添加到堆栈中.. - CRUSADER
好的,但是还有另一个问题:当我触摸第二个活动时,它也应该关闭;所以如果我处于横向模式,第一个活动的布局会改变,我猜测? - deimos1988
@deimos1988,你的问题现在变得更加不清晰了。你可以更新你的问题,添加你当前观察到的内容和你实际想要的内容的截图...这些截图会非常有帮助。你也可以参考这里以更好地理解如何处理屏幕布局 - CRUSADER

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接