如何向Android布局动态传递字符串以设置app:videoId属性?
动态设置
app:videoId属性的解决方案 方案1:使用Data Binding(数据绑定)实现动态传值
这是官方推荐的适配自定义属性动态赋值的方案,实现步骤如下:
- 开启模块的数据绑定支持,在模块级
build.gradle中添加配置:
android { ... buildFeatures { dataBinding true } }
- 修改原有约束布局,根节点外层套入
<layout>标签,定义动态参数:
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="videoId" type="java.lang.String" /> </data> <!-- 原有的约束布局代码 --> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <com.你的自定义视频View路径 android:id="@+id/videoView" android:layout_width="match_parent" android:layout_height="match_parent" app:videoId="@{videoId}" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
- 在对应页面(Activity/Fragment)中初始化绑定对象,动态传入视频ID:
// Activity中示例 val binding = DataBindingUtil.setContentView<你的布局绑定类名>(this, R.layout.你的布局文件名) binding.videoId = "你要动态传入的视频ID字符串"
方案2:反射调用属性对应set方法(适合不想引入Data Binding的场景)
自定义View的app:videoId属性会自动对应生成setVideoId(String)方法,你可以直接反射调用该方法完成赋值,不需要调用loadVideo类接口:
// 先获取你的自定义视频View实例 YourVideoView videoView = findViewById(R.id.videoView); try { Method setVideoIdMethod = videoView.getClass().getMethod("setVideoId", String.class); setVideoIdMethod.invoke(videoView, "动态视频ID"); } catch (Exception e) { e.printStackTrace(); }
关联的约束布局内容截图:

内容的提问来源于stack exchange,提问作者Mustafa Çeliktaş
相关产品推荐
相关产品推荐

