Как создать представление YouTube с полноэкранными и портретными возможностями в представлении фрагмента контейнера - PullRequest
0 голосов
/ 16 мая 2019

У меня есть контейнер активности и структуры кадра для замены фрагментов внутри действия. Как ниже

<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rootCo_Ordinator_Layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#efefef"
    android:orientation="vertical"
    android:fitsSystemWindows="false"
    tools:context=".DetailsActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <include layout="@layout/app_bar" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <FrameLayout
                android:id="@+id/container"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_above="@id/scroll_view_horizontal" />


            <HorizontalScrollView
                android:id="@+id/scroll_view_horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fillViewport="true"
                android:layout_above="@id/second_row">

                <TextView
                    android:id="@+id/tv_path"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ellipsize="none"
                    android:padding="8dp"
                    android:scrollbars="horizontal"
                    android:singleLine="true"
                    android:textColor="@android:color/black"
                    android:textStyle="italic|bold"
                    tools:text="Sample Text" />

            </HorizontalScrollView>


            <LinearLayout
                android:id="@+id/second_row"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:background="#000000"
                android:orientation="horizontal"
                android:paddingBottom="4dp"
                android:weightSum="5">

                <Button
                    android:id="@+id/btn_content"
                    style="@style/DetailButtonStyle"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_horizontal"
                    android:layout_weight="1"
                    android:text="@string/btn_desc"
                    android:textAllCaps="false" />

                <Button
                    android:id="@+id/btn_sub_cat"
                    style="@style/DetailButtonStyle"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_horizontal"
                    android:layout_weight="1"
                    android:text="@string/btn_cat"
                    android:textAllCaps="false" />

                <Button
                    android:id="@+id/btn_text"
                    style="@style/DetailButtonStyle"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_horizontal"
                    android:layout_weight="1"
                    android:text="@string/btn_cmntry"
                    android:textAllCaps="false" />

                <Button
                    android:id="@+id/btn_video"
                    style="@style/DetailButtonStyle"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:text="@string/btn_videos"
                    android:textAllCaps="false" />

                <Button
                    android:id="@+id/btn_image"
                    style="@style/DetailButtonStyle"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="center_horizontal"
                    android:layout_weight="1"
                    android:text="@string/btn_images"
                    android:textAllCaps="false" />
            </LinearLayout>
        </RelativeLayout>
    </LinearLayout>

    <androidx.core.widget.ContentLoadingProgressBar
        android:id="@+id/details_loading"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@android:color/transparent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

И у меня есть еще один фрагмент, который динамически создает youtubeplayerview ,

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:fitsSystemWindows="false"
    android:scrollbars="vertical">

    <LinearLayout
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/root_element"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:scrollbars="vertical"
        android:fitsSystemWindows="false"
        tools:context=".fragments.IntroFragment">

        <include
            layout="@layout/empty_view"
            android:visibility="gone" />
    </LinearLayout>
</ScrollView>

У меня есть класс FullScreen Util, как показано ниже

public class FullScreenHelper {

private Activity context;
private View[] views;

public FullScreenHelper(Activity context, View ... views) {
    this.context = context;
    this.views = views;
}

public void enterFullScreen(View selectedView, View[] allViews) {
    View decorView = context.getWindow().getDecorView();
    hideSystemUi(decorView);
    for(View view : views) {
        if (!(view instanceof FrameLayout) && (view != selectedView) ) {
            view.setVisibility(View.GONE);
            view.invalidate();
        }
    }

    for (View view:allViews){
        if (view != null && (view != selectedView)  ){
            view.setVisibility(View.GONE);
            view.invalidate();
        }
    }
}


public void exitFullScreen(View selectedView, View[] allViews) {
    View decorView = context.getWindow().getDecorView();

    showSystemUi(decorView);

    for(View view : views) {
        view.setVisibility(View.VISIBLE);
        view.invalidate();
    }

    for (View view:allViews){
        if (view != null && (view != selectedView)  ){
            view.setVisibility(View.VISIBLE);
            view.invalidate();
        }
    }
}

private void hideSystemUi(View mDecorView) {
    mDecorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}

private void showSystemUi(View mDecorView) {
    mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}

И я фиксирую переключатель и делаю изменения в Деятельности, как показано ниже,

  FullScreenHelper fsHelper = 
            new FullScreenHelper(this,mAppBar,mPathTextView,mHorizontalScrollView,mSecondRow);

       @Override
        public void toLandScape(View selectedView, View... allViews) {
              isLandscape = true;
              this.selectedView = selectedView;
              this.allViews = new View[allViews.length];
              this.allViews = allViews;
              setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
              getSupportActionBar().hide();
              fsHelper.enterFullScreen(selectedView,allViews);
         }

         @Override
         public void toPortrait(View selectedView, View... allViews) {
               isLandscape = false;
               setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
               getSupportActionBar().show();
              fsHelper.exitFullScreen(selectedView,allViews);
          }

Может быть много youtubeplayerviews , созданный динамически во фрагменте. Я добавил соответствующего слушателя при нажатии на экран переключения.Когда пользователь нажимает на переключатель в текущем представлении, проигрыватель YouTube должен заполнить экран и скрыть все остальные виды, а при повторном нажатии переключателя должен вернуть скрытые виды. Но я не могудостичь этого.В настоящее время все виды скрываются при изменении альбомной ориентации и отображают все виды на портретной ориентации.Любая помощь в том, как я это делаю, будет высоко оценена. !!!

1 Ответ

0 голосов
/ 16 мая 2019

перейти на любое видео на YouTube

https://www.youtube.com/watch?v=m8ZoxzX0hro       #this is how the url looks 

Теперь, чтобы сделать его полноэкранным и использовать его в своем приложении, вы должны внести изменение в URL, говоря:

https://www.youtube.com/embed?v=m8ZoxzX0hro 

часы заменены на встраиваемые

...