Android中的VideoView显示不完全

博客提及在Android开发中存在一种写法,且表示应该还有其他办法,但未详细说明该写法具体内容。

可以使用如下写法(应该还有别的办法)

### Android VideoView 横屏播放时控制栏显示异常的解决方案 在 Android 开发中,使用 `VideoView` 进行视频播放时,在横屏模式下可能会遇到控制栏(`MediaController`)显示异常的问题。这种问题通常表现为控制栏的位置错乱、无法点击或界面协调。要解决这个问题,需要从以下几个方面入手: #### 1. 动态调整 VideoView 的布局参数 在横屏模式下,`VideoView` 的比例需要适配屏幕,通常将其度设置为 `match_parent`,度设置为 `wrap_content` 或根据屏幕比例动态计算。通过在代码中动态修改 `VideoView` 的 `LayoutParams`,可以确保其在横屏下正确显示,避免拉伸或黑边问题 [^3]。 ```java ViewGroup.LayoutParams params = videoView.getLayoutParams(); params.width = ViewGroup.LayoutParams.MATCH_PARENT; params.height = (int) (getResources().getDisplayMetrics().widthPixels * 0.5625); // 16:9 比例 videoView.setLayoutParams(params); ``` #### 2. 自定义 MediaController 系统自带的 `MediaController` 在横屏模式下可能无法正确适配 UI,因此建议使用自定义的控制栏。自定义控制器可以完全掌控其布局和交互逻辑,确保其在同屏幕方向下都能正常显示和操作。 ```java public class CustomMediaController extends MediaController { public CustomMediaController(Context context) { super(context); } @Override public void setLayoutParams(ViewGroup.LayoutParams params) { // 自定义布局逻辑 params.width = ViewGroup.LayoutParams.MATCH_PARENT; params.height = ViewGroup.LayoutParams.WRAP_CONTENT; super.setLayoutParams(params); } } ``` #### 3. 横竖屏切换时更新控制栏 在 `onConfigurationChanged` 方法中检测当前屏幕方向,动态更新 `VideoView` 和 `MediaController` 的布局和显示逻辑。确保在横屏模式下控制栏始终位于屏幕底部,并且按钮大小和间距适配横屏 UI。 ```java @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横屏处理 mediaController.setAnchorView(findViewById(R.id.rl_vv)); } else { // 竖屏处理 mediaController.setAnchorView(findViewById(R.id.rl_vv)); } } ``` #### 4. AndroidManifest.xml 中配置 configChanges 为了防止 Activity 在横竖屏切换时重建,可以在 `AndroidManifest.xml` 中配置 `configChanges` 属性,避免因 Activity 重启导致的播放中断或 UI 重置问题 [^2]。 ```xml <activity android:name=".VideoActivity" android:configChanges="keyboard|orientation|screenSize" android:screenOrientation="portrait" /> ``` #### 5. 使用外层容器包裹 VideoView 为 `VideoView` 添加一个外层容器(如 `RelativeLayout`),在横屏切换时通过调整该容器的尺寸和布局参数,确保 `VideoView` 和 `MediaController` 的显示区域正确适配 [^2]。 ```xml <RelativeLayout android:id="@+id/rl_vv" android:layout_width="match_parent" android:layout_height="200dp" android:background="@android:color/black" android:minHeight="200dp" android:visibility="visible"> <VideoView android:id="@+id/vv" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout> ``` --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值