如何修改VideoView的媒体控制器并将其置于VideoView底部而非布局底部
解决MediaController锚定在VideoView底部的问题
嘿,我看你已经尝试用mc.setAnchorView(vid)来把媒体控制器绑定到VideoView上,但可能还是没达到预期效果——控制器依然跑到了布局底部而不是VideoView的底部。别慌,我们来调整下代码和布局设置,搞定这个问题。
核心问题分析
setAnchorView()本来就是用来让MediaController相对于指定View(也就是你的VideoView)定位的,但有时候因为调用顺序不对或者VideoView布局参数设置不合理,会导致锚定失效。
修改后的代码方案
先调整代码的调用顺序,再添加一些细节优化,确保控制器牢牢钉在VideoView底部:
// 初始化VideoView和MediaController vid = findViewById(R.id.vidview); mc = new MediaController(this); // 关键:先设置锚定View,再绑定到VideoView mc.setAnchorView(vid); vid.setMediaController(mc); // 配置视频源 String httpLiveUrl = "http://livestream.in:1010/live/vido.m3u8"; Uri uri = Uri.parse(httpLiveUrl); vid.setVideoURI(uri); // 额外优化:去掉控制器默认内边距,强制设置底部居中 mc.setPadding(0, 0, 0, 0); ViewGroup.LayoutParams params = mc.getLayoutParams(); if (params instanceof FrameLayout.LayoutParams) { FrameLayout.LayoutParams frameParams = (FrameLayout.LayoutParams) params; frameParams.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL; mc.setLayoutParams(frameParams); } // 启动播放 vid.start();
布局注意事项
还要检查你的VideoView XML布局,确保它的尺寸不是wrap_content(否则VideoView可能会被拉伸到屏幕大小,看起来控制器还是在屏幕底部):
<VideoView android:id="@+id/vidview" android:layout_width="match_parent" android:layout_height="250dp" <!-- 或者用固定宽高、match_parent,根据你的需求 --> android:layout_centerInParent="true"/>
如果你的VideoView是全屏的,那控制器在VideoView底部和屏幕底部看起来一样,但如果VideoView是局部的,上面的调整就能明显看到效果啦。
内容的提问来源于stack exchange,提问作者Om Prakash Verma
相关产品推荐
相关产品推荐

