如何在YouTube播放器中添加操作栏?
我尝试在此活动中添加操作栏,但因为它未扩展到AppCompatActivity
,导致我在{{1}中收到错误的原因}}。如果我将getSupportActionBar();
替换为YouTubeBaseActivity
,我也会收到错误消息。任何人都可以帮我这个吗?
AppCompatActivity
答案 0 :(得分:0)
我遇到了同样的问题,如果您或其他人仍然需要解决,我会发布一个答案。忘记YoutubeBaseActivity
并关注YoutubePlayerSupportFragment
,因为Fragment允许您根据需要设置Activity。还有YoutubePlayerFragment
,但支持版本的android支持库效果更好。
这是我使用的步骤:
让您的活动扩展AppCompatActivity
public class ActivityPlayer extends AppCompatActivity {
在扩展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" />
创建一个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;
}
}
在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>
在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();
你已经完成了。
答案 1 :(得分:0)
您应该实现一个AppCompatCallback
接口。
请见我的answer.