Android 在不更改活动的情况下更新子视图';s方向

Android 在不更改活动的情况下更新子视图';s方向,android,Android,我有一个活动,其方向锁定为纵向: <activity android:name="MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar"> 然而,在活动中,我有一些自定义视图,其中我绘制了一些文本、矩形,尤其是表示箭头的路径 我需要能够在手机旋转时更

我有一个活动,其方向锁定为纵向:

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

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

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

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

如何侦听物理方向的更改并更新嵌套视图以重新绘制


谢谢,p

更新:

当当前活动的
活动
屏幕方向
设置为
纵向
横向
时,似乎无法检测方向变化(但尚未测试其他值。即使使用广播接收器和

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


这不起作用:

您应该覆盖
活动中的函数
,并从该函数刷新UI


请注意,您需要将
android:configChanges=“orientation”
添加到您的活动中,以便调用此函数。

当然可以!只需子类
OrientationEventListener
并在
onOrientationChanged
方法中执行您需要执行的操作即可

实例化类时,显然要将上下文传递给构造函数,然后在对象上调用
enable()
,这样就可以开始了

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

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

当设备的方向改变时调用。
方向
参数以度为单位,范围从0到359。
方向
为0 当设备定位在其自然位置时,90度 左侧位于顶部时为度,左侧位于顶部时为180度 上下颠倒,当其右侧到顶部时为270度。
方向\u UNKNOWN
在设备接近水平和垂直时返回 方向无法确定

可以找到这些文档


希望这有帮助!

我已经添加了xml属性和方法实现(调用时应该会显示Toast),但什么都没有发生。我猜这是因为
screenOrientation=“肖像”
setting?@inazaruk-您是否在清单中锁定屏幕方向的情况下尝试过此操作,因为我刚刚尝试过,并且根本没有调用OnConfiguration Changed您是对的。如果设置了
screenOrientation
,则不会报告屏幕方向配置更改。那么还有其他方法吗?没有,它看起来像
screenOrientationion
是在系统内部的某个深处处理的,因为即使为ACTION\u CONFIGURATION\u CHANGED事件注册广播接收器也无济于事。此外,即使这是稍后的回复,我认为如果从现在开始需要它,它仍然会对某人有所帮助。