在片段内的后退按钮上关闭 Youtube Player 全屏
close fullscreen of Youtube Player on back button inside fragment
我在平板电脑上使用Master/Detail布局,左边几个按钮打开几个片段,其中一个片段包含youtube播放器。
问题,
当 youtube 播放器全屏时,我按下后退按钮,activity onBackPressed
被调用,整个 activity 已关闭。
我试过了,
1- 添加了父片段(包含 Youtube 片段)的 KeyListener 和点击后退按钮时的处理,但只有当播放器不是全屏时才会调用此监听器,否则不会调用,
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;
}
});
2- 将 onKeyListener 添加到 youtubeFragment View 以检查它是否全屏然后关闭全屏模式
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;
}
});
而且这也不是在所有情况下都会调用。
我需要在 youtube 播放器处于全屏状态时处理硬件后退按钮,全屏模式已关闭且应用程序处于其先前状态。
谢谢。
编辑 1:
- 我想在片段中处理它,而不是在父级 Activity 中处理它,我已经在父级 activity 中处理它,但我不喜欢这个解决方案。
您可以在 activity 中覆盖 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();
}
}
P.S. In above code fragment, isFullscreen
is instance variable of our
activity and is synced with youtubePlayer
state from within
OnFullscreenListener
set on youtubePlayer.setOnFullScreenListener()
.
Hope that makes sense :)
添加到 Andre 的回复中。
在你的 parent Activity 添加:
public YouTubePlayer youTubePlayer;
public boolean isYouTubePlayerFullScreen;
在您的片段中添加:
MainActivity mainActivity = (MainActivity) getActivity();
然后,在 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;
}
});
}
现在您的 Activity
可以访问 YouTubePlayer
以及播放器是否全屏显示的信息。
接下来,在您的 Activity
中,像这样覆盖 onBackPressed
:
@Override
public void onBackPressed() {
if (youTubePlayer != null && isYouTubePlayerFullScreen){
youTubePlayer.setFullscreen(false);
} else {
super.onBackPressed();
}
}
我在平板电脑上使用Master/Detail布局,左边几个按钮打开几个片段,其中一个片段包含youtube播放器。
问题,
当 youtube 播放器全屏时,我按下后退按钮,activity onBackPressed
被调用,整个 activity 已关闭。
我试过了,
1- 添加了父片段(包含 Youtube 片段)的 KeyListener 和点击后退按钮时的处理,但只有当播放器不是全屏时才会调用此监听器,否则不会调用,
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;
}
});
2- 将 onKeyListener 添加到 youtubeFragment View 以检查它是否全屏然后关闭全屏模式
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;
}
});
而且这也不是在所有情况下都会调用。
我需要在 youtube 播放器处于全屏状态时处理硬件后退按钮,全屏模式已关闭且应用程序处于其先前状态。
谢谢。
编辑 1: - 我想在片段中处理它,而不是在父级 Activity 中处理它,我已经在父级 activity 中处理它,但我不喜欢这个解决方案。
您可以在 activity 中覆盖 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();
}
}
P.S. In above code fragment,
isFullscreen
is instance variable of our activity and is synced withyoutubePlayer
state from withinOnFullscreenListener
set onyoutubePlayer.setOnFullScreenListener()
.Hope that makes sense :)
添加到 Andre 的回复中。
在你的 parent Activity 添加:
public YouTubePlayer youTubePlayer;
public boolean isYouTubePlayerFullScreen;
在您的片段中添加:
MainActivity mainActivity = (MainActivity) getActivity();
然后,在 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;
}
});
}
现在您的 Activity
可以访问 YouTubePlayer
以及播放器是否全屏显示的信息。
接下来,在您的 Activity
中,像这样覆盖 onBackPressed
:
@Override
public void onBackPressed() {
if (youTubePlayer != null && isYouTubePlayerFullScreen){
youTubePlayer.setFullscreen(false);
} else {
super.onBackPressed();
}
}