我有一个活动,其方向被锁定为肖像:
<activity android:name="MainActivity" android:label="@string/app_name"
android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar">
然而,在活动中,我有一些自定义视图,其中我绘制了一些文本,矩形,特别是一个表示箭头的路径。
我需要能够在手机旋转时更新箭头,而无需更改活动的整体布局。
因此活动和布局始终是纵向的,但是当手机从纵向倾斜到横向时,我的嵌套视图需要通知并重新绘制。
如何监听物理方向的变化并更新告诉我的嵌套视图重绘?
谢谢,p
答案 0 :(得分:1)
当然可以!只需将OrientationEventListener
子类化,然后在onOrientationChanged
方法中执行您需要执行的操作。
当你实例化你的类时,显然会将上下文传递给构造函数,然后在对象上调用enable()
,你就可以了。
唯一的缺点是它不仅仅是PORTRAIT或LANDSCAPE,而是以度为单位的精确旋转。但是通过一些调试和一个漂亮的if / then语句,你可以找出这些数字的范围。
以下是来自文档的有用提示:
当设备的方向发生变化时调用。
orientation
参数以度为单位,范围从0到359.orientation
为0 当设备定位在其自然位置时的度数,90 当它的左侧在顶部时为180度,当它是时为180度 颠倒,当它的右侧到顶部时270度。 当设备接近平坦时,会返回ORIENTATION_UNKNOWN
方向无法确定。
可以找到文档here。
希望这有帮助!
答案 1 :(得分:0)
更新:
当前有效Activity
将screenOrientation
设置为portrait
或landscape
时,似乎无法检测方向更改(尚未测试其他值)虽然。甚至使用广播接收器和ACTION_CONFIGURATION_CHANGED。
我能想到的唯一方法是手动跟踪传感器。
这不起作用:
您应该覆盖Activity
中的onConfigurationChanged()
功能,并从该功能刷新您的用户界面。
请注意,您需要为活动添加android:configChanges="orientation"
才能调用此函数。