2011-12-08 17 views
5

Me gustaría agregar mediante programación VideoView a LinearLayout. LinearLayout tiene una identificación de "principal".Agregar VideoView a un diseño XML

Al hacer referencia a esta pregunta SO Video Streaming and Android, pude hacer que el video apareciera y se reproduciera, pero ¿qué pasaría si quisiera crear un nuevo VideoView sobre la marcha y agregarlo al diseño?

Este es el código XML que estoy tratando de "copia" mediante programación:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:id="@+id/main" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent"> 
<VideoView android:id="@+id/your_video_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
/> 
</LinearLayout> 

Así es como he tratado de lograr lo mismo mediante programación:

VideoView videoView = new VideoView(this); 
LinearLayout layout = (LinearLayout)findViewById(R.id.main); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
layout.addView(videoView, params); 

El problema es que el vídeo doesn ¡Aparecer en absoluto! Con VideoView declarado en XML, todo funciona bien, pero programáticamente, no funciona en absoluto.

Para ser claros, no quiero tener una VideoView definida en el archivo XML cuando lo estoy haciendo mediante programación.

+0

Cuando se llama 'addView()' y no pasa nada, lo hace Logcat decir nada? –

+0

No, logcat no dice nada – user5243421

Respuesta

4

No estoy muy seguro de por qué su código no funciona, pero puedo proporcionar un ejemplo de uno de mis proyectos, donde inflico un VideoView y lo agrego a un FrameLayout que se coloca dentro de LinearLayout. Controlo mi video a través de MediaController.

Aquí es el XML para mi FrameLayout:

<FrameLayout 
    android:id="@+id/videoFrameLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
</FrameLayout> 

En la res/layout Tengo un archivo XML solo contiene un VideoView:

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

para agregarlo mediante programación necesitamos un inflador y el marco:

inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
videoFrame = (FrameLayout)findViewById(R.id.videoFrameLayout); 

Cuando quiero mostrar el vídeo y reproducirlo utilizo el siguiente co de:

videoView = (VideoView) inflater.inflate(R.layout.your_video_view, null); 
MediaController mediaController = new MediaController(this); 
mediaController.setAnchorView(videoView); 
videoView.setMediaController(mediaController); 
videoView.setVideoPath(FilePathHere); 
videoFrame.addView(videoView); 
videoView.start(); 

espero que esto puede ser de alguna ayuda para usted hasta que alguien es capaz de responder a su pregunta :-)

+0

Disculpe la ambigüedad, pero quise decir que no tendría una VideoView definida en el archivo de diseño XML. Estoy buscando agregar un nuevo VideoView completamente programáticamente desde el principio, sin necesidad de inflar. Tenga en cuenta la línea donde declaro un nuevo VideoView usando la palabra clave "this" en lugar de algo del archivo generado R.java. ¡Gracias de todos modos por tu respuesta! – user5243421

Cuestiones relacionadas