Я думаю, что самый простой способ сделать это - поместить содержимое CardView
в FrameLayout
, в соответствии с документами :
Дочерние представлениянарисованный в стеке, с последним добавленным потомком сверху.Размер FrameLayout - это размер его самого большого дочернего элемента (плюс заполнение), видимый или нет (если позволяет родительский элемент FrameLayout).Представления View.GONE используются для определения размера только в том случае, если для setConsiderGoneChildrenWhenMeasuring () задано значение true.
Предположим, что это макет CardView
:
<androidx.cardview.widget.CardView>
<!-- your contents -->
</androidx.cardview.widget.CardView>
Измените его на:
<androidx.cardview.widget.CardView>
<FrameLayout>
<LinearLayout android:orientation="horizontal">
<View
android:id="@+id/left"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0"
android:background="color1"/>
<View
android:id="@+id/right"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="100"
android:background="color2"/>
</LinearLayout>
<!-- your contents -->
</FrameLayout>
</androidx.cardview.widget.CardView>
И в коде:
findViewById<View>(R.id.left).layoutParams = LinearLayout.LayoutParams(
0, LinearLayout.LayoutParams.MATCH_PARENT, x)
findViewById<View>(R.id.right).layoutParams = LinearLayout.LayoutParams(
0, LinearLayout.LayoutParams.MATCH_PARENT, 100f - x)