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



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

我正在尝试在此活动中添加操作栏,但由于它没有扩展到AppCompatActivity这就是为什么我在getSupportActionBar();中遇到错误的原因。如果我用AppCompatActivity替换YouTubeBaseActivity,我也会收到错误。谁能帮我解决这个问题?

public class ActivityPlayer extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
public String DEVELOPER_KEY = "key";
public String YOUTUBE_VIDEO_CODE = "5z-Roo_NpI4";
private static final int RECOVERY_DIALOG_REQUEST = 1;
YouTubePlayerView youTubeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupActionBar();
setContentView(R.layout.activity_main);
youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_player);
youTubeView.initialize(DEVELOPER_KEY, this);
}
private void setupActionBar() {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.options_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return true;
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) {
if (errorReason.isUserRecoverableError()) {
errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
} else {
Snackbar.make(youTubeView, "There was an error initializing the video player.", Snackbar.LENGTH_LONG).setDuration(5000).show();
}
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
if (!wasRestored) {
player.loadVideo(YOUTUBE_VIDEO_CODE);
player.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RECOVERY_DIALOG_REQUEST) {
getYouTubePlayerProvider().initialize(DEVELOPER_KEY, this);
}
}
@Override
public void onBackPressed() {
finish();
}
private YouTubePlayer.Provider getYouTubePlayerProvider() {
return (YouTubePlayerView) findViewById(R.id.youtube_player);
}
}

我和你有同样的问题,我正在发布一个答案,以防你或其他人仍然需要变通。忘记YoutubeBaseActivity,专注于YoutubePlayerSupportFragment,因为 Fragment 可让您根据需要设置活动。也有YoutubePlayerFragment,但它的支持版本与 android 支持库配合得更好。

这是我使用的步骤:

  1. 使您的活动扩展应用兼容活动

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

    <FrameLayout
    android:id="@+id/flYoutube"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:visibility="visible" />
    
  3. 创建 YoutubeFragment 扩展了 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中创建第二个框架布局

    <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 的实例,并通过片段事务将activity_main.xml中的帧布局替换为该 YoutubeFragment 实例:

    // Create Youtube Fragment instance by passing a Youtube Video ID
    YoutubeFragment youtubeFragment = YoutubeFragment.newInstance("2zNSgSzhBfM");
    getSupportFragmentManager().beginTransaction()
    .replace(R.id.flYoutube, youtubeFragment).commit();
    

你完成了。

你应该实现一个AppCompatCallback接口。

请看我的回答。

最新更新