我在(支持)ViewPager中使用YouTubePlayerSupportFragment时遇到问题。除非我将视频放在全屏上然后减少它,否则一切正常。它将不再在Viewpager中播放。
Logcat错误:
W / YouTubeAndroidPlayerAPI:YouTube视频播放因此而停止 未经授权的覆盖在玩家之上。 YouTubePlayerView不是 包含在它的祖先里面 com.google.android.youtube.player.YouTubePlayerView {2fcbbe15 V.E ..... ...... ID 0,0-1920,919}。祖先的边缘与之间的距离 YouTubePlayerView的内容是:left:0,top:0,right:0,bottom: -281(这些都应该是正面的)。
这是我的(简化)代码:
fragment_home.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white"/>
<TextView
android:id="@+id/fragment_home_no_news_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone"
android:text="@string/home_home_title_no_news"/>
</RelativeLayout>
GSYoutubeFragment.java
public class GSYoutubeFragment extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener, OnBackPressedListener, YouTubePlayer.OnFullscreenListener {
private static final String KEY_VIDEO_ID = "VIDEO_ID";
String mVideoId;
YouTubePlayer mPlayer;
boolean mIsFullScreen;
public static GSYoutubeFragment newInstance(String videoId) {
GSYoutubeFragment frag = new GSYoutubeFragment();
Bundle args = new Bundle();
args.putString(KEY_VIDEO_ID, videoId);
frag.setArguments(args);
return frag;
}
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
if (getArguments() != null) {
mVideoId = getArguments().getString(KEY_VIDEO_ID);
}
initialize("myapikey, you won't see it :)", this);
}
@Override
public void onResume() {
super.onResume();
((GSActionBarActivity) getActivity()).addOnBackPressedListener(this);
}
@Override
public void onPause() {
super.onPause();
((GSActionBarActivity) getActivity()).removeOnBackPressedListener(this);
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
mPlayer = youTubePlayer;
youTubePlayer.setOnFullscreenListener(this);
youTubePlayer.cueVideo(mVideoId);
}
@Override
public void onBackPressed() {
if (mPlayer != null && mIsFullScreen) {
((GSActionBarActivity)getActivity()).shouldIgnoreCurrentBackPressEvent();
mPlayer.setFullscreen(false);
}
}
@Override
public void onFullscreen(boolean fullscreen) {
mIsFullScreen = fullscreen;
}
}
GSHomeFragment.java
public class GSHomeTabletFragment extends AbsGSHomeFragment implements ViewPager.OnPageChangeListener {
private ViewPager mViewPager;
private SlidingTabLayout mSlidingTabLayout;
private HomeCursorPagerFragmentAdapter mNewsCursorPagerFragmentAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home, container, false);
mViewPager = (ViewPager) v.findViewById(R.id.pager);
mNewsCursorPagerFragmentAdapter = new HomeCursorPagerFragmentAdapter(getActivity().getSupportFragmentManager(), this, null);
mViewPager.setAdapter(mNewsCursorPagerFragmentAdapter);
mSlidingTabLayout = getSlidingTabs();
mSlidingTabLayout.setOnPageChangeListener(this);
return v;
}
@Override
public void onResume() {
super.onResume();
mNewsCursorPagerFragmentAdapter.setParentFragment(this);
mSlidingTabLayout.showTabs();
mSlidingTabLayout.setEnabled(true);
}
@Override
public void onDestroyView() {
super.onDestroyView();
mSlidingTabLayout.hideTabs();
mSlidingTabLayout.setEnabled(false);
}
@Override
protected void onNewsLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
mNewsCursorPagerFragmentAdapter = new HomeCursorPagerFragmentAdapter(getActivity().getSupportFragmentManager(), cursor);
mViewPager.setAdapter(mNewsCursorPagerFragmentAdapter);
mSlidingTabLayout.setViewPager(mViewPager);
getLoaderManager().destroyLoader(LOADER_NEWS_ID);
}