Android - 对话框内 VideoView 的 MediaController 出现在对话框后面

标签 android dialog android-videoview mediacontroller

我在自定义对话框中有一个 VideoView,我正在为 VideoView 动态创建一个媒体 Controller 并将其分配给 VideoView 在代码中,但是 Controller 实际上并没有出现在视频上 - 它出现在对话框后面!知道如何让 Controller 位于视频上方吗?

我创建了一个静态对话框助手类来帮助构建自定义对话框:

public class DialogHelper {

    public static Dialog getVideoDialog(Context context, Uri videoLocation, boolean autoplay) {
        final Dialog dialog = getBaseDialog(context,true, R.layout.dialog_video);

        ((Activity)context).getWindow().setFormat(PixelFormat.TRANSLUCENT);
        final VideoView videoHolder = (VideoView) dialog.findViewById(R.id.video_view);
        videoHolder.setVideoURI(videoLocation);
        //videoHolder.setRotation(90);
        MediaController mediaController =  new MediaController(context);
        videoHolder.setMediaController(mediaController);
        mediaController.setAnchorView(videoHolder);
        videoHolder.requestFocus();
        if(autoplay) {
            videoHolder.start();
        }
        videoHolder.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                dialog.dismiss();

            }
        });
        return dialog;
    }


    /**
     * Creates a simple dialog box with as many buttons as you want
     * @param context The context of the dialog
     * @param cancelable whether the dialog can be closed/cancelled by the user
     * @param layoutResID the resource id of the layout you want within the dialog
     * 
     * @return the dialog
     */
    public static Dialog getBaseDialog(Context context, boolean cancelable, int layoutResID) {
        Dialog dialog = new Dialog(context, R.style.Theme_PopUpDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(cancelable);
        dialog.setCanceledOnTouchOutside(cancelable);
        dialog.setContentView(layoutResID);

        return dialog;
    }
}

所以在我的 Activity 中,我只是用这个来创建我的对话框:

Dialog videoDialog = DialogHelper.getVideoDialog(context, Uri.parse("http://commonsware.com/misc/test2.3gp"), true);
videoDialog.show();

最佳答案

这对我有用

在 xml 布局中进行这样的更改,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <VideoView
        android:id="@+id/videoview"
        android:layout_width="640dp"
        android:layout_height="400dp"
        android:layout_centerInParent="true" >
    </VideoView>

        <FrameLayout
            android:id="@+id/videoViewWrapper"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true" >
        </FrameLayout>

    </RelativeLayout>

在你的对话中,

mVideoView = (VideoView) view.findViewById(R.id.videoview);

在此,视频 View 使用 setOnPreparedListener 监听器并设置媒体 Controller ,

mVideoView.setOnPreparedListener(new OnPreparedListener() {

                @Override
                public void onPrepared(MediaPlayer mp) {
                    // TODO Auto-generated method stub
                    mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
                        @Override
                        public void onVideoSizeChanged(MediaPlayer mp,
                                int width, int height) {
                            /*
                             * add media controller
                             */
                            mc = new MediaController(MainActivity.this);
                            mVideoView.setMediaController(mc);
                            /*
                             * and set its position on screen
                             */
                            mc.setAnchorView(mVideoView);

                            ((ViewGroup) mc.getParent()).removeView(mc);

                            ((FrameLayout) findViewById(R.id.videoViewWrapper))
                                    .addView(mc);
                            mc.setVisibility(View.VISIBLE);
                        }
                    });
                    mVideoView.start();
                }
            });

关于Android - 对话框内 VideoView 的 MediaController 出现在对话框后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10633677/

相关文章:

android - 在 MediaController show() 和 hide() 上隐藏和显示工具栏

android:隐藏媒体 Controller 功能

Android GCM 项目 ID,哪个?

javascript - 在对话框打开时重置 Vuetify 表单

android - 如何为ActionBar溢出图标设置contentDescription

javascript - 最佳确认对话框 JavaScript 库

jsf-2 - Primefaces 对话框 + 命令按钮

android - 有没有办法只回收回收 View 中的第一项?

android - 为什么 Android 会在我的 SpinnerAdapter 中回收错误的 View 类型?

android - TextView 和 RelativeLayout onMeasure 调用了很多