![](/img/trans.png)
[英]android mediacontroller - defining the mediacontroller in the layout xml
[英]How can I get an Android MediaController to appear from layout xml?
我已經使用以下XML創建了一個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膨脹?
您可以阻止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中充氣一個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秒)
在布局文件中聲明我的MediaController時,在代碼中獲取句柄(使用Activity.findViewById(int id)
方法)並將其附加到我的VideoView(使用VideoView.setMediaController(MediaController controller)
方法),我發現它有時表現不合需要(強制關閉應用程序)。 相反,我在代碼中創建它,將其附加到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();
http://www.docstoc.com/docs/9811647/Media-on-the-Android-Platform
本文檔建議您可能需要擴展Controller以獲得所需的行為。
您可以在很長一段時間內展示它我想;)
我現在正努力甚至讓控制器顯示然后按下按鈕:
(也很有趣google如何快速將此問題添加到搜索結果中)
我認為這是你的“mVideoView.setVideoURI”部分。 我最近一直在做類似的事情,包括這個,似乎必須通過服務器檢索視頻。 您需要將視頻存儲在服務器上,然后在此處調用。 無論如何,這就是我發生的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.