添加View未铺满全屏,如何实现Sinch远程视频通话画面全屏显示
远程视频画面全屏实现方案
1. 布局文件调整
首先确认XML布局中id为remoteVideo的RelativeLayout配置:
- 宽高属性均设置为
match_parent - 移除该控件及其所有父控件的
padding、margin属性 - 确保布局中没有其他控件覆盖或占用
remoteVideo的展示区域
2. 代码层面适配
你当前直接添加视频视图未指定布局参数,会默认使用wrap_content导致无法铺满容器,修改addVideoViews中远程视图添加逻辑:
private fun addVideoViews() { if (mVideoViewsAdded || sinchServiceInterface == null) { return //early } val vc = sinchServiceInterface!!.getVideoController() if (vc != null) { val localView = findViewById<View>(com.ayush.flow.R.id.localVideo) as RelativeLayout val remoteview = findViewById<View>(com.ayush.flow.R.id.remoteVideo) as RelativeLayout val lview = vc.localView val rview=vc.remoteView // 本地视图配置(可选) lview.layoutParams = RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT ) localView.addView(lview) // 远程视图全屏配置 val remoteLayoutParams = RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT ) rview.layoutParams = remoteLayoutParams // 配置缩放模式:SCALE_ASPECT_FILL会等比例拉伸裁剪视频,完全填满容器,不留黑边 // 不同Sinch SDK版本方法名可能有差异,可对应调整为你所用版本的缩放配置API rview.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL) // 清空默认边距 rview.setPadding(0,0,0,0) remoteview.addView(rview) mVideoViewsAdded = true localView.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View?) { //this toggles the front camera to rear camera and vice versa vc.toggleCaptureDevicePosition() } }) } }
3. 系统栏适配(可选,需完全全屏时配置)
如果需要连系统状态栏、导航栏也隐藏,实现真正的全屏效果,在对应Activity的onCreate方法中添加如下代码:
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
同时在Manifest对应Activity节点配置android:fitsSystemWindows="false",避免布局自动缩进预留系统栏位置。
内容的提问来源于stack exchange,提问作者Ayush Mishra
相关产品推荐
相关产品推荐

