如何在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 支持库配合得更好。
这是我使用的步骤:
-
使您的活动扩展应用兼容活动
public class ActivityPlayer extends AppCompatActivity {
-
在扩展 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" />
-
创建 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; } }
-
在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>
-
在 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
接口。
请看我的回答。