如何在YouTube播放器活动中添加应用栏?

时间:2018-03-02 16:10:18

标签: java android youtube-api youtube-data-api android-youtube-api

如何在YouTube播放器中添加操作栏?

我尝试在此活动中添加操作栏,但因为它未扩展到AppCompatActivity,导致我在{{1}中收到错误的原因}}。如果我将getSupportActionBar();替换为YouTubeBaseActivity,我也会收到错误消息。任何人都可以帮我这个吗?

AppCompatActivity

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,如果您或其他人仍然需要解决,我会发布一个答案。忘记YoutubeBaseActivity并关注YoutubePlayerSupportFragment,因为Fragment允许您根据需要设置Activity。还有YoutubePlayerFragment,但支持版本的android支持库效果更好。

这是我使用的步骤:

  1. 让您的活动扩展AppCompatActivity

    public class ActivityPlayer extends AppCompatActivity {
    
  2. 在扩展AppCompatActivity(activity_main.xml)的当前活动的xml布局中添加FrameLayout

     <FrameLayout
        android:id="@+id/flYoutube"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:visibility="visible" />
    
  3. 创建一个YoutubeFragment extends Fragment,其中包含fragment_youtube.xml布局和FrameLayout。在onCreateView中,创建一个YoutubePlayerSupportFragment实例,并将fragment_youtube.xml中的FrameLayout替换为YoutubePlayerSupportFragment的实例。

    public class YoutubeFragment extends Fragment {
        private static final String YOUTUBE_API_KEY = "8S7K4hEVhgOQ87501j-FAKE-KEY";
    
        // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
        private static final String VIDEO_ID = "VIDEO_ID";
    
        // TODO: Rename and change types of parameters
        private String videoId;
    
        public YoutubeFragment() {
            // Required empty public constructor
        }
    
    
        public static YoutubeFragment newInstance(String videoId) {
            YoutubeFragment fragment = new YoutubeFragment();
            Bundle args = new Bundle();
            args.putString(VIDEO_ID, videoId);
            fragment.setArguments(args);
            return fragment;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (getArguments() != null) {
                videoId = getArguments().getString(VIDEO_ID);
            }
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View rootView = inflater.inflate(R.layout.fragment_youtube, container, false);
    
            YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance();
            FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
            transaction.replace(R.id.flYoutubePlayer, youTubePlayerFragment).commit();
    
            youTubePlayerFragment.initialize(YOUTUBE_API_KEY, new YouTubePlayer.OnInitializedListener() {
    
                @Override
                public void onInitializationSuccess(YouTubePlayer.Provider arg0, YouTubePlayer youTubePlayer, boolean b) {
                    if (!b) {
                        //youTubePlayer.setFullscreen(true);
                        youTubePlayer.loadVideo(videoId);
                        //yoTubePlayer.play();
                    }
                }
    
                @Override
                public void onInitializationFailure(YouTubePlayer.Provider arg0, YouTubeInitializationResult arg1) {
                    // TODO Auto-generated method stub
    
                }
            });
    
            return rootView;
        }
    
    }
    
  4. 在fragment_youtube.xml中创建第二个FrameLayout

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="jfsl.ayibopost.fragments.YoutubeFragment">
    
        <FrameLayout
            android:id="@+id/flYoutubePlayer"
            android:layout_width="match_parent"
            android:layout_height="200dp"></FrameLayout>
    
    </RelativeLayout>
    
  5. 在PlayerActivity onCreate()中要做的最后一件事是创建自己创建的YoutubeFragment的实例,并通过Fragment Transaction将Active_main.xml中的Frame Layouts替换为YoutubeFragment实例:

    // Create Youtube Fragment instance by passing a Youtube Video ID
    YoutubeFragment youtubeFragment = YoutubeFragment.newInstance("2zNSgSzhBfM");
    getSupportFragmentManager().beginTransaction()
                .replace(R.id.flYoutube, youtubeFragment).commit();
    
  6. 你已经完成了。

答案 1 :(得分:0)

您应该实现一个AppCompatCallback接口。

请见我的answer.