YouTubePlayer together with AppCompat v7 library

落爺英雄遲暮 提交于 2019-11-28 03:34:36

问题


I have developed an app that uses YouTube android API to play a certain video inside the app. At that time I have used as target API 19, and also target API 19. Now I want do change the design of the app switching to Material Design using target API 22 and also using AppCompat-v7 :22+ library. But the YouTubeBaseActivity cant be opened and the application crashes. Below I will post what I have done so far.

EventDetail.java

public class EventDetail extends YouTubeBaseActivity implements
        YouTubePlayer.OnInitializedListener { .
.
.
protected void onCreate(Bundle savedInstanceState) {

        // remove the shadow from action bar
        setTheme(R.style.Theme_TranslucentActionBar_ActionBar_NoOverlay);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_detail);

        // enable back button

        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        // setting the action bar initially transparent
        mActionBarBackgroundDrawable = new ColorDrawable(
                Color.parseColor("#ec5c59"));
        mActionBarBackgroundDrawable.setAlpha(0);

        getSupportActionBar().setBackgroundDrawable(mActionBarBackgroundDrawable);

        // binding the scrollview

...

Manifest File

<activity
        android:name="com.dev.apk.evente.al.EventDetail"
        android:icon="@drawable/ikona_projekte"
        android:label="@string/title_activity_event_detail"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.TranslucentActionBar.ActionBar.Overlay" />

Layut File:

<RelativeLayout
    android:id="@+id/video_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="20dp"
    android:paddingLeft="23dp"
    android:paddingRight="23dp"
    android:paddingBottom="15dp"
    android:background="@drawable/event_background_block" >

    <TextView
        android:id="@+id/video_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@color/white"
        android:gravity="left"
        android:paddingTop="10dp"

        android:paddingBottom="10dp"
        android:text="Video"
        android:textColor="@color/VeryDarkGray"
        android:textSize="22sp" >
    </TextView>

    <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/youtube_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/video_label"
        android:background="@color/white" />
</RelativeLayout>

Theme.xml File

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="Theme.TranslucentActionBar" parent="Theme.AppCompat.Light.DarkActionBar">

        <item name="android:actionBarStyle">@style/Widget.ActionBar</item>
    </style>

    <style name="Theme.TranslucentActionBar.ActionBar" />

    <style name="Theme.TranslucentActionBar.ActionBar.Overlay">
        <item name="android:actionBarStyle">@style/Widget.ActionBar.Transparent</item>
        <item name="android:windowActionBarOverlay">true</item>
        <item name="colorPrimary">@color/evente_date_color</item>
        <item name="colorPrimaryDark">@color/evente_darken_color</item>
    </style>

    <!-- Theme without ActionBar shadow (inherits main theme) -->

    <style name="Theme.TranslucentActionBar.ActionBar.NoOverlay" parent="Theme.TranslucentActionBar.ActionBar.Overlay">
        <item name="android:windowContentOverlay">@null</item>
    </style>

</resources>

So at the beginning it doesn't open because the method getActionBar() return Null, then i changed it to getSupportActionBar() but i doesn't recognized it. Then at the end I changed this line in the following:

public class EventDetail extends AppCompatActivity implements
        YouTubePlayer.OnInitializedListener {

and it gives me the following error:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myikub.al/com.dev.apk.evente.al.EventDetail}: android.view.InflateException: Binary XML file line #250: Error inflating class com.google.android.youtube.player.YouTubePlayerView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
    at android.app.ActivityThread.access$600(ActivityThread.java:148)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:150)
    at android.app.ActivityThread.main(ActivityThread.java:5406)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #250: Error inflating class com.google.android.youtube.player.YouTubePlayerView
    at android.view.LayoutInflater.createView(LayoutInflater.java:620)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
    at com.dev.apk.evente.al.EventDetail.onCreate(EventDetail.java:112)
    at android.app.Activity.performCreate(Activity.java:5303)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
    at android.app.ActivityThread.access$600(ActivityThread.java:148)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:150)
    at android.app.ActivityThread.main(ActivityThread.java:5406)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.constructNative(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
    at android.view.LayoutInflater.createView(LayoutInflater.java:594)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
    at com.dev.apk.evente.al.EventDetail.onCreate(EventDetail.java:112)
    at android.app.Activity.performCreate(Activity.java:5303)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
    at android.app.ActivityThread.access$600(ActivityThread.java:148)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:150)
    at android.app.ActivityThread.main(ActivityThread.java:5406)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: A YouTubePlayerView can only be created with an Activity  which extends YouTubeBaseActivity as its context.
    at com.google.android.youtube.player.YouTubePlayerView.<init>(Unknown Source)
    ....

I am using Android Studio. Any idea will be appreciated.


回答1:


The problem is that you're using the YouTubePlayerView, which requires your Activity to extend YouTubeBaseActivity. Then you changed your activity, so that it now extends AppCompatActivity. This breaks YouTubePlayerView.

The solution is pretty simple: use the YouTubePlayerFragment class. This does not pose any requirement on the Activity, leaving you with plenty of options for your theming.




回答2:


According to the stack trace the activity has to extend YouTubeBaseActivity when using the YouTube API

If you need to have an actionbar then I think the best route is to change the style to have no actionbar and just use a toolbar in your view.




回答3:


paste this code inside gradle app

compile 'com.google.android.gms:play-services:8.4.0'
compile files('libs/YouTubeAndroidPlayerApi.jar')


来源:https://stackoverflow.com/questions/30101825/youtubeplayer-together-with-appcompat-v7-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!