我正在开发一款具有内嵌视频播放器的应用程序。我需要重现Youtube的全屏行为。
当用户转向横向旋转设备时,我通过onConfigurationChanged捕获它并进行相应的布局修改。
但是,我也有一个设置全屏的按钮。我需要这个按钮才能进入landscpe(ergo,全屏),但不要通过传感器锁定方向变化。
以下是我目前在onConfigurationChanged上所做的事情:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (this.isLandscape(newConfig.orientation)){
this.goToFullScreenMode();
}else{
this.goToInlineMode();
}
}
这就是我在按钮中所做的事情,但失败了,因为它将Activity锁定在横向中:
this.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
我需要的是进入横向模式,但允许用户使用传感器更改回肖像,就像Youtube一样。
我可以通过锁定横向直到设备处于水平状态(通过直接从传感器读取)然后再次解锁方向来实现。我不认为这是最“正确”的做法。
答案 0 :(得分:4)
2016年未来派年度的问候。
生活的道路让我回到了另一个Android应用程序的同样困境,我发现问题的真正答案就是简单地添加这个......
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
...将方向设置为所需设置后立即。
这是我自己以前的答案
由于缺乏答案,而且因为我不能解决这个问题 一个优雅的方式,我最终使用OrientationListener来获得 设备的原始程度。
通过这种方式,我能够释放用户的方向配置 一旦设备定位像实际布局。
如果有人有兴趣获得更多信息,请告诉我 知道。
答案 1 :(得分:0)
在res中创建 layout-land
目录,并将布局XML文件的横向版本放在该目录中。
或者将此行放在清单文件
中的活动标记中机器人:screenOrientation = “风景”;
答案 2 :(得分:-1)
试试这个..
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
或在你的清单中
<activity
android:name="Activity"
android:screenOrientation="landscape" />
答案 3 :(得分:-1)
将此信息放入您的Manifest中以进行各自的活动
<activity
android:name="YourActivityName goes here"
android:screenOrientation="landscape" />