ventanas tipos studio emergentes edittext diálogos dialogos dialogo crear con android dialog videoview mediacontroller

tipos - Android-MediaController de VideoView dentro del diálogo aparece detrás del diálogo



tipos de dialogos en android studio (2)

Tengo un VideoView dentro de un cuadro de diálogo personalizado, y estoy creando un controlador de medios para VideoView sobre la marcha y asignándolo a VideoView en el código; sin embargo, el controlador no aparece en realidad sobre el video: ¡aparece detrás del cuadro de diálogo! ¿Alguna idea de cómo obtener el controlador por encima del video?

Creé una clase de asistente de diálogo estático para ayudar a construir los cuadros de diálogo personalizados:

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

Entonces en mi Activity solo tengo esto para crear mi diálogo:

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


Esto me funciona

en el diseño xml hacer cambios como este,

<?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>

en tu dilog,

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

en esto, la vista de video usa el oyente setOnPreparedListener y establece el controlador de medios,

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


Sugiero que debe usar una Activity lugar de un Dialog . Establezca su tema de Activity para emular un Dialog en el manifiesto.

Ejemplo - AndroidManifest.xml:

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

Luego, podrá mostrar una VideoView como en los ejemplos.