2009-11-18 64 views
8

我已经用下面的XML创建了一个layout.xml文件,但我无法让MediaController出现。在代码中,我可以从代码中获得对它的引用,调用show()等,但是它从不出现。我已经注意到在android开发文档(MediaController.html),它指出,“使用这个类的方式是以编程方式实例化它”,所以也许我是一个dufus,只需要做一些不同的事情,比如不要做我正在做的事情。 :)我怎样才能让Android MediaController从布局xml出现?

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

回答

16

this sample project

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

然后,当你点击屏幕t将其将会出现缺少您的VideoView的底部边缘。

就始终保持屏幕而言......我不知道这是否可能。您始终可以创建自己的控制器 - here's a sample project,它可以创建自己的弹出式半透明控制器。它并不是那么辛苦,你可以完全控制一切,包括安排它一直在屏幕上。

+1

ctlr.show(0)确实显示控制器,直到隐藏被称为先生 – 2014-03-23 11:14:31

0

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

此文档意味着你可能需要扩展控制器获得您需要的行为。

你也可以显示出它很长一段时间我想;)

我目前努力甚至可以控制显示,然后我按下一个按钮:\

(也是有趣的速度有多快加入谷歌这个问题的搜索结果)

1

通过使用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); 

等待屏幕,以避免在android系统中的错误,以打造专业化(1.5秒在这里)

9

可以防止的MediaController从隐藏扩展的MediaController和覆盖隐藏()什么也不做,例如:

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

在声明中布局文件我的MediaController,在代码中得到一个手柄上(使用Activity.findViewById(int id)法)并将其连接到我的VideoView (使用VideoView.setMediaController(MediaController controller)方法),I发现它的行为不受欢迎(强制关闭应用程序)有时。相反,我在代码中创建它,将其连接到VideoView,然后指定它应该在活动使用VideoView.setAnchorView(View view)方法如下显示:

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

您可以从充气布局XML中的MediaController。另外,获得参考后,可以将视频视图设置为主播。

  • 但这将尽快导致崩溃,当你试图去触摸 的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(); 
      } 
     }); 
    } 
} 
0

我认为这是你的 “mVideoView.setVideoURI” 一节。我最近一直在处理类似的事情,包括这个,似乎视频必须通过服务器来检索。您需要将您的视频存储在服务器上,然后在此处打电话。无论如何,这就是我发生的事情。