我怎样才能让一个Android MediaController从布局xml出现?

我用下面的XML创build了一个layout.xml文件,但是我不能让MediaController出现。

<MediaController android:id="@+id/media_controller" android:layout_width="fill_parent" android:layout_height="200px" android:visibility="visible"/> 

在代码中,我可以从代码中获得对它的引用,调用show()等,但它永远不会出现。

我注意到在Android开发文档( MediaController.html ),它指出,“使用这个类的方式是以编程方式实例化”,所以也许我是一个dufus,只需要做一些不同的事情,如不做我在做什么 🙂

我可以让它出现,如果我以编程方式做,但我需要它始终出现在屏幕上。 我只是愚蠢的,还是不是要通过XML膨胀?

Solutions Collecting From Web of "我怎样才能让一个Android MediaController从布局xml出现?"

从这个示例项目 :

 ctlr=new MediaController(this); ctlr.setMediaPlayer(video); video.setMediaController(ctlr); 

然后,当你点击屏幕的VideoView的底部边缘时,它会出现。

在屏幕上始终保持屏幕…我不知道这是可能的。 您始终可以创build自己的控制器 – 这是一个样例项目 ,可以创build自己的popup式半透明控制器。 这并不是那么难,而且你可以完全控制所有的东西,包括安排它一直在屏幕上。

您可以防止MediaController隐藏扩展MediaController并覆盖hide()不执行任何操作。 例如:

 class UnhideableMediaController extends MediaController { // override whichever contstructors you need to. public UnhideableMediaController(Context context) { super(context); } // override hide to do nothing public void hide() { // don't hide } } 

您可以从布局xml中为媒体控制器充气。 另外获得参考后,可以将video设置为主播。

  • 但是,一旦你尝试触摸mediacontroller,这将导致崩溃(我想弄清楚为什么会发生)。

此外mediaController将始终显示。

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <VideoView android:id="@+id/mVideoView" android:layout_width="match_parent" android:layout_height="match_parent" /> <MediaController android:id="@+id/mediaController1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:focusable="false" android:focusableInTouchMode="false"/> </RelativeLayout> 

在活动中,

 public class AnimationActivity extends Activity implements OnClickListener { private MediaController mController = null; private VideoView mVideoView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_animation); mController = (MediaController) findViewById(R.id.mediaController1); mController.post(new Runnable() { @Override public void run() { mVideoView = (VideoView) findViewById(R.id.mVideoView); mVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video0)); mController.setAnchorView(mVideoView); mVideoView.setSoundEffectsEnabled(false); mVideoView.start(); } }); } } 

通过使用show(0), 媒体控制器将被显示,直到hide()通过与玩家的交互被调用。 我发现不幸的是没有办法防止hide()呢;-(

 MediaController mc = new MediaController(MPlayer.this); mc.setMediaPlayer(MPlayer.this); mc.setEnabled(true); View mMediaControllerView = (View)findViewById(R.id.media_controller); //get it from your layout mc.setAnchorView(mMediaControllerView); mMediaControllerView.setOnTouchListener(mPlayerTouchListener);//also use show() in onTouchListener new Handler().postDelayed(new Runnable() { public void run() { mc.show(0); } }, 1500); 

等待屏幕buid为了避免在android中的错误(1.5秒在这里)

http://www.docstoc.com/docs/9811647/Media-on-the-Android-Platform

这个文件build议你可能需要扩展控制器来获得你需要的行为。

你也可以展示很长一段时间,我想;)

我目前正在努力,甚至让控制器显示,然后我按下button:\

(也有趣的是谷歌如何快速地将这个问题添加到search结果)

在布局文件中声明我的MediaController,在代码中使用Activity.findViewById(int id)方法得到一个句柄,并将其附加到我的VideoView(使用VideoView.setMediaController(MediaController controller)方法),我发现它行为不当(强制closures应用程序)有时。 相反,我使用代码创build它,将其附加到VideoView,然后使用VideoView.setAnchorView(View view)方法指定它应该在Activity中显示的位置,如下所示:

 myVideoView.setVideoURI(Uri.parse(myVideoUrl)); myVideoView.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { MediaController mediaController = new MediaController(MyActivity.this); videoView.setMediaController(mediaController); // put the MediaController at the bottom of the Activity rather than directly beneath the VideoView // (note that my Activity's layout file has root node with id 'myactivity_layoutroot') if (findViewById(R.id.myactivity_layoutroot) != null) mediaController.setAnchorView(findViewById(R.id.myactivity_layoutroot)); videoView.requestFocus(); } }); myVideoView.start(); 

我认为这是你的“mVideoView.setVideoURI”部分。 我最近一直在做一个类似的事情,包括这个,似乎video必须通过服务器检索。 您需要将video存储在服务器上,然后在此处调用。 无论如何,这就是我发生的事情。