2009-11-18 106 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」 一節。我最近一直在處理類似的事情,包括這個,似乎視頻必須通過服務器來檢索。您需要將您的視頻存儲在服務器上,然後在此處打電話。無論如何,這就是我發生的事情。