首页 > 解决方案 > Videoview 不在 nougat 24 中显示,但在 android Q 29 中显示和工作

问题描述

我正在工作应用程序。当按钮单击发生时,它会显示带有视频视图的弹出窗口。它显示在 android 29 api 中,但不在 android 24 api 中。以下是它的 showvideopopup 函数代码。

private void showVideoPopup()
    {
        LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View customView = layoutInflater.inflate(R.layout.dispensing_intro,null);

        int uiOptions =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;
        customView.setSystemUiVisibility(uiOptions);


//        closePopupBtn = (Button) customView.findViewById(R.id.closeView);

        //instantiate popup window
        dispense_intro_popup = new PopupWindow(customView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        //display the popup window
        dispense_intro_popup.showAtLocation(dispense_intro_view, Gravity.CENTER, 0, 0);

        VideoView video = (VideoView) customView.findViewById(R.id.dispense_intro);
        Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/raw/"+ R.raw.dispense_intro);
        video.setVideoURI(videoUri);
        video.start();

        video.setOnCompletionListener(this);

    }

以下是popup.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="#b3000000"
    android:layout_height="700dp"
    android:id="@+id/dispense_intro_holder"
    android:layout_gravity="center"
    android:gravity="center">


    <VideoView
        android:id="@+id/dispense_intro"
        android:layout_gravity="center"
        android:layout_width="640dp"
        android:layout_height="360dp"  />
</LinearLayout>

标签: androidandroid-layoutandroid-videoviewandroid-fullscreen

解决方案


使用DialogFragment()而不是PopupWindow.

然后将以下代码添加到片段中onCreateView

弹出片段.java

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.popup, container, false);
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.FullscreenTheme);
        VideoView video = (VideoView) rootView.findViewById(R.id.dispense_intro);
        Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/raw/"+ R.raw.dispense_intro);
        video.setVideoURI(videoUri);
        video.start();

        video.setOnCompletionListener(this);

        return rootView;

}

并使对话框片段全屏使用以下代码onDialogCreated

public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        dialog.getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        // Hide the nav bar and status bar
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN);
        return dialog;
    }

推荐阅读