在一个活动中,我嵌入了一个video窗口小部件(与SurfaceView相关联的VideoView或MediaPlayer),当旋转屏幕时,应调整其大小。 此活动用作TabHost中的内容。
我目前的做法
为了处理屏幕旋转,我提供了两个布局,一个用于纵向,另一个用于横向(放置在./res/layout和./res/layout-land文件夹中)。
这种方法的问题是为每个旋转创建了一个新的Activity,因此我不使用相同的MediaPlayer(或VideoView)=>每次旋转屏幕时,我都会从头开始播放video。 当video从网络流式传输时,无法在video中存储位置,以便在重新启动其他活动中的video时寻找此位置。
我想做什么
我需要能够在旋转屏幕时翻译/缩放/隐藏Activity内的视图。 翻译/缩放需要维护布局组织,以便具有适应不同屏幕尺寸的布局。
我的问题
如何将视图转换/移动到屏幕的左上角?
如何隐藏/翻译屏幕外的视图以使视图消失?
如何缩放/调整视图大小以调整其大小到它周围的可用空间?
我需要实现哪个接口回调才能获得屏幕旋转通知以触发这些转换?
我终于find了做到这一点的好方法。 在Android文档中,指定当您需要处理修改(方向,键盘……)而不重新创建新Activity时,您应该通过覆盖Activity类的onConfigurationChanged方法来完成。 您必须在Activity的清单文件中指定合理的修改。
你可以在这里find更多相关信息。
就我而言,我的活动清单看起来像:
在我的MyActivity Activity中,我添加了以下方法:
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); int visibility = View.VISIBLE; if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { visibility = View.GONE; } getTabHost().getTabWidget().setVisibility(visibility); }
我的活动具有以下布局:
这样,当我隐藏/显示tabWidget栏时,VideoView(添加到TabHost的内容会被resize,当在横向时,我有全屏观看电影。
我希望它会帮助你们中的一些人。