更新子视图而不更改活动的方向

时间:2011-07-05 13:40:08

标签: android

我有一个活动,其方向被锁定为肖像:

    <activity android:name="MainActivity" android:label="@string/app_name"
        android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar">

然而,在活动中,我有一些自定义视图,其中我绘制了一些文本,矩形,特别是一个表示箭头的路径。

我需要能够在手机旋转时更新箭头,而无需更改活动的整体布局。

因此活动和布局始终是纵向的,但是当手机从纵向倾斜到横向时,我的嵌套视图需要通知并重新绘制。

如何监听物理方向的变化并更新告诉我的嵌套视图重绘?

谢谢,p

2 个答案:

答案 0 :(得分:1)

当然可以!只需将OrientationEventListener子类化,然后在onOrientationChanged方法中执行您需要执行的操作。

当你实例化你的类时,显然会将上下文传递给构造函数,然后在对象上调用enable(),你就可以了。

唯一的缺点是它不仅仅是PORTRAIT或LANDSCAPE,而是以度为单位的精确旋转。但是通过一些调试和一个漂亮的if / then语句,你可以找出这些数字的范围。

以下是来自文档的有用提示:

  

当设备的方向发生变化时调用。 orientation   参数以度为单位,范围从0到359. orientation为0   当设备定位在其自然位置时的度数,90   当它的左侧在顶部时为180度,当它是时为180度   颠倒,当它的右侧到顶部时270度。   当设备接近平坦时,会返回ORIENTATION_UNKNOWN   方向无法确定。

可以找到文档here

希望这有帮助!

答案 1 :(得分:0)

更新

当前有效ActivityscreenOrientation设置为portraitlandscape时,似乎无法检测方向更改(尚未测试其他值)虽然。甚至使用广播接收器和ACTION_CONFIGURATION_CHANGED

我能想到的唯一方法是手动跟踪传感器。


这不起作用:

您应该覆盖Activity中的onConfigurationChanged()功能,并从该功能刷新您的用户界面。

请注意,您需要为活动添加android:configChanges="orientation"才能调用此函数。