[Android]修改XML中定义的约束比例

修改约束比例:

Kotlin 复制代码
/// 约束比例修改
private fun adapterCellRatio(holder: BaseViewHolder) {
    // 确保视图完全加载后进行操作
    val consLayoutBaseBG = holder.getView<ConstraintLayout>(R.id.cl_cell_bg) 
    // 获取当前约束比例
    val currentDimensionRatio = getCurrentDimensionRatio(consLayoutBaseBG, R.id.cl_cell_bg_id)
    val targetDimensionRatio = "h,78:65"
    if (currentDimensionRatio != targetDimensionRatio) {
        val constraintSet = ConstraintSet() // 创建 ConstraintSet 实例
        constraintSet.clone(consLayoutBaseBG) // 加载当前布局约束
        constraintSet.setDimensionRatio(R.id.cl_cell_bg_id, targetDimensionRatio ) // 修改 layout_constraintDimensionRatio 的比例
        constraintSet.applyTo(consLayoutBaseBG) // 应用新的约束
    }
}
XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/cl_cell_bg"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/black"
    android:radius="10dp">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/cl_cell_bg_id"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintDimensionRatio="h,78:60"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_center"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

注意报错

Error updating constraint: All children of ConstraintLayout must have ids to use ConstraintSet

报错信息指出,ConstraintLayout 中的所有子视图都必须有 ID 才能使用 ConstraintSet。这是因为 ConstraintSet 需要通过视图的 ID 来引用和修改约束。你需要确保所有直接或间接属于 ConstraintLayout 的子视图都有一个唯一的 ID。

相关推荐
姐姐,我还可以1 小时前
搭建 MySQL MHA
android·数据库·mysql·adb
德育处主任Pro2 小时前
『Django』模型入门教程-操作MySQL
android·数据库·mysql·django·sqlite
Geeker555 小时前
如何从iPhone恢复错误删除的照片
android·数据库·macos·ios·pdf·手机·iphone
我又来搬代码了6 小时前
【Android】【Compose】Compose里面的Row和Column的简单使用
android
分享者花花7 小时前
如何从华为恢复永久删除的视频?
android·华为·智能手机·word·手机·cocoa·iphone
张风捷特烈8 小时前
FlutterUnit & TolyUI | 布局游乐场
android·flutter
程序猿的玻璃心17 小时前
【Android源码】AOSP下载
android
sky_brian18 小时前
android studio 添加aar包
android·ide·android studio
薛文旺20 小时前
Android焦点窗口设定
android
三花AI20 小时前
DigiRL:让 AI 自己学会控制手机
android·人工智能·苹果