方向更改时 YouTubePlayerFragment 黑屏
YouTubePlayerFragment black screen on orientation changes
我正在努力 YouTubePlayerFragment
在方向改变时继续玩。
代码如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
FrameLayout frameLayout = new FrameLayout(getActivity());
populateViewForOrientation(inflater, frameLayout);
return frameLayout;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LayoutInflater inflater = LayoutInflater.from(getActivity());
populateViewForOrientation(inflater, (ViewGroup) getView());
}
private void populateViewForOrientation(LayoutInflater inflater, ViewGroup viewGroup) {
viewGroup.removeAllViewsInLayout();
rootView = inflater.inflate(getLayoutResId(), viewGroup);
ButterKnife.bind(this, rootView);
if (frYTube != null) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame, frYTube);
transaction.commitAllowingStateLoss();
}
}
片段已替换(我看到上面有文字)并且正在播放音乐但没有播放视频 - 黑屏。
我该如何处理?有可能取回视频吗?顺便说一句,如果旋转后下一个视频是 oppenes - 视频出现。
我试过为当前视频调用 pause
和 play
- 它没有帮助。
我没有尝试 YouTubePlayerView
因为我使用 moxy
所以我需要处理片段。
upd
看起来创建带有 YouTubePlayerFragment
的自定义视图具有更稳定的行为(然后删除添加视图)。但是黑屏问题依然存在
在这种情况下可以通过以下方式恢复视频:
mYouTubePlayer.loadVideo(url);
...
public void onLoaded(String s) {
mYouTubePlayer.seekToMillis(mills);
但是重新加载视频没有任何意义,我正在努力避免这种情况 - 出现延迟
基于此 post, make sure that you are initializing the YouTubePlayerView
in onCreate()
when onCreate()
was called during a restore rather than an explicit create. Here's a tutorial 其中包含片段的 activity 不需要扩展任何特殊基础 class.
您也可以查看此相关主题:Screen orientation not working with youtubePlayerfragment
快速简便的解决方案是将以下内容添加到您的视频 activity,在您的清单中:
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
我有一个应用程序将它用于视频,并且运行良好。一切都在方向变化时正确布局,activity 和片段实例不会被拆除,允许它无缝地继续播放。
如果希望activity被撕裂down/recreated,同时保留片段实例,请重新阅读setRetainInstance()的文档。
您需要注意一些细微差别才能使其正常工作:
https://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
使用它会在方向改变后继续播放片段
我发现并有效的唯一方法是手动处理屏幕方向:
1) 添加到您的 activity:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
2) 在 activity class:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
someFunctionToHandleOrienttion();
}
并且您不应该扩充新布局。只需删除 recreate/add 除了 youtubeframe
之外的所有内容,即可使土地布局看起来像您想要的。这有点棘手和奇怪,但在其他情况下,您会看到黑屏而不是视频。
我正在努力 YouTubePlayerFragment
在方向改变时继续玩。
代码如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
FrameLayout frameLayout = new FrameLayout(getActivity());
populateViewForOrientation(inflater, frameLayout);
return frameLayout;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LayoutInflater inflater = LayoutInflater.from(getActivity());
populateViewForOrientation(inflater, (ViewGroup) getView());
}
private void populateViewForOrientation(LayoutInflater inflater, ViewGroup viewGroup) {
viewGroup.removeAllViewsInLayout();
rootView = inflater.inflate(getLayoutResId(), viewGroup);
ButterKnife.bind(this, rootView);
if (frYTube != null) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frame, frYTube);
transaction.commitAllowingStateLoss();
}
}
片段已替换(我看到上面有文字)并且正在播放音乐但没有播放视频 - 黑屏。
我该如何处理?有可能取回视频吗?顺便说一句,如果旋转后下一个视频是 oppenes - 视频出现。
我试过为当前视频调用 pause
和 play
- 它没有帮助。
我没有尝试 YouTubePlayerView
因为我使用 moxy
所以我需要处理片段。
upd
看起来创建带有 YouTubePlayerFragment
的自定义视图具有更稳定的行为(然后删除添加视图)。但是黑屏问题依然存在
在这种情况下可以通过以下方式恢复视频:
mYouTubePlayer.loadVideo(url);
...
public void onLoaded(String s) {
mYouTubePlayer.seekToMillis(mills);
但是重新加载视频没有任何意义,我正在努力避免这种情况 - 出现延迟
基于此 post, make sure that you are initializing the YouTubePlayerView
in onCreate()
when onCreate()
was called during a restore rather than an explicit create. Here's a tutorial 其中包含片段的 activity 不需要扩展任何特殊基础 class.
您也可以查看此相关主题:Screen orientation not working with youtubePlayerfragment
快速简便的解决方案是将以下内容添加到您的视频 activity,在您的清单中:
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
我有一个应用程序将它用于视频,并且运行良好。一切都在方向变化时正确布局,activity 和片段实例不会被拆除,允许它无缝地继续播放。
如果希望activity被撕裂down/recreated,同时保留片段实例,请重新阅读setRetainInstance()的文档。
您需要注意一些细微差别才能使其正常工作: https://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
使用它会在方向改变后继续播放片段
我发现并有效的唯一方法是手动处理屏幕方向:
1) 添加到您的 activity:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
2) 在 activity class:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
someFunctionToHandleOrienttion();
}
并且您不应该扩充新布局。只需删除 recreate/add 除了 youtubeframe
之外的所有内容,即可使土地布局看起来像您想要的。这有点棘手和奇怪,但在其他情况下,您会看到黑屏而不是视频。