Oma*_*din 6 youtube android master-detail android-fragments
我在平板电脑中使用Master/Detail布局,在左边的几个按钮上打开几个片段,其中一个片段包含youtube播放器.
问题,
当youtube播放器全屏时,按下后退按钮,调用活动 onBackPressed,整个活动关闭.
我试过的,
1-在KeyListener上添加父片段(包含Youtube片段)并在单击后退按钮时处理,但仅当播放器不是全屏时才调用此侦听器,否则不调用此侦听器,
rootView.setFocusableInTouchMode(true);
rootView.requestFocus();
rootView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
try {
// Close full screen
return true;
} catch (Exception e) {
AHHExceptionHandler.handleException(e);
}
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
2-添加onKeyListener到youtubeFragment查看是否全屏,然后关闭全屏模式
youTubeFragment.getView().setFocusableInTouchMode(true);
youTubeFragment.getView().requestFocus();
youTubeFragment.getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
try {
youTubePlayer.setFullscreen(false);
return true;
} catch (Exception e) {
AHHExceptionHandler.handleException(e);
}
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
并且在所有情况下也没有调用.
当youtube播放器处于全屏模式时,我需要处理硬件后退按钮,全屏模式关闭,应用程序处于先前状态.
谢谢.
编辑1: - 我想在片段内处理这个,而不是在父Activity中处理它,我已经在父活动中处理它,但我不喜欢这个解决方案.
只是为了补充Andre的回复。
在您的父活动中添加:
public YouTubePlayer youTubePlayer;
public boolean isYouTubePlayerFullScreen;
Run Code Online (Sandbox Code Playgroud)
在您的片段中添加:
MainActivity mainActivity = (MainActivity) getActivity();
Run Code Online (Sandbox Code Playgroud)
然后,在YouTubePlayerFragment初始化时:
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) {
mainActivity.youTubePlayer = player;
player.loadVideo(videoId);
player.setOnFullscreenListener(new YouTubePlayer.OnFullscreenListener() {
@Override
public void onFullscreen(boolean b) {
mainActivity.isYouTubePlayerFullScreen = b;
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在,您Activity可以访问YouTubePlayer播放器是否全屏,并可以获取信息。
接下来,在您的内Activity,onBackPressed像这样覆盖:
@Override
public void onBackPressed() {
if (youTubePlayer != null && isYouTubePlayerFullScreen){
youTubePlayer.setFullscreen(false);
} else {
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以onBackPressed()在您的活动中覆盖,如果您的播放器处于全屏状态,您可以按如下方式处理它:
@Override
public void onBackPressed() {
if (youtubePlayer != null && isFullscreen) {
// if fullscreen, set fullscreen false
youtubePlayer.setFullscreen(false);
} else {
// if NOT fullscreen, perform default call on back press
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
PS在上面的代码片段中,是我们 Activity 的实例变量,并与set on内的状态
isFullscreen同步。youtubePlayerOnFullscreenListeneryoutubePlayer.setOnFullScreenListener()希望这是有道理的:)
| 归档时间: |
|
| 查看次数: |
2799 次 |
| 最近记录: |