Android – 对话框中的VideoView的MediaController出现在对话框后面

我在一个自定义对话框中有一个VideoView ,我正在创buildVideoView的媒体控制器,并将其分配给代码中的VideoView ,但是控制器实际上并没有出现在video上 – 它出现在对话框后面! 任何想法如何让控制器上面的video?

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

 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我只是有这个来创build我的对话框:

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

Solutions Collecting From Web of "Android – 对话框中的VideoView的MediaController出现在对话框后面"

我build议你需要使用一个Activity而不是一个Dialog 。 设置您的Activity主题来模拟清单中的Dialog

示例 – AndroidManifest.xml:

 android:theme="@android:style/Theme.Dialog" 

然后,您将能够像示例中一样显示VideoView

这对我有效

在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); 

在此,video视图使用setOnPreparedListener监听器并设置媒体控制器,

 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(); } });