如何在android中使用constraintSet在一个constraintLayout中显示具有不同组件和ID的不同xml布局
我有一个片段,我需要展示,并通过一些步骤(在本例中,我有3个步骤)将一些XML布局融入其中,我知道我们可以简单地将布局包含到父片段布局中,只处理可见/消失的布局。但是我想用ConstraintLayout中的ConstraintSet来实现它。当我搜索将另一个XML布局加载到父XML布局时,每个XML布局中的两个根元素都必须是具有相同组件和相同ID的约束布局。但在我的示例中,我有不同的XML布局和根元素约束布局,但在每个XML布局中,我有不同的组件和ID。现在我的问题是如何根据步骤使用另一个XML布局更改部分XML布局? 我们关心的是平滑这个布局和改变一些动画布局。这些是我的文件: 拾取碎片:如何在android中使用constraintSet在一个constraintLayout中显示具有不同组件和ID的不同xml布局,android,xml,android-constraintlayout,constraintset,Android,Xml,Android Constraintlayout,Constraintset,我有一个片段,我需要展示,并通过一些步骤(在本例中,我有3个步骤)将一些XML布局融入其中,我知道我们可以简单地将布局包含到父片段布局中,只处理可见/消失的布局。但是我想用ConstraintLayout中的ConstraintSet来实现它。当我搜索将另一个XML布局加载到父XML布局时,每个XML布局中的两个根元素都必须是具有相同组件和相同ID的约束布局。但在我的示例中,我有不同的XML布局和根元素约束布局,但在每个XML布局中,我有不同的组件和ID。现在我的问题是如何根据步骤使用另一个XM
class PickupFragment : BaseFragment<FragmentPickupBinding, PickupViewModel>
(R.layout.fragment_pickup, PickupViewModel()) {
private val primaryConstraintBody = ConstraintSet()
private val parcelConstraintBody = ConstraintSet()
private val senderConstraintBody = ConstraintSet()
private val receiverConstraintBody = ConstraintSet()
private val body by lazy { binding.body }
private val pickupRequestStepObserver = Observer<Int> { step ->
when (step) {
0 -> parcelConstraintBody.loading(body)
1 -> senderConstraintBody.loading(body)
2 -> receiverConstraintBody.loading(body)
}
}
override fun initVariables() {
binding.viewModel = vModel
}
override fun initObserves() {
vModel.pickupRequestStep.observe(this, pickupRequestStepObserver)
}
override fun initViews() {
vModel.pickupRequestStep.value = 0
primaryConstraintBody.clone(body)
parcelConstraintBody.clone(context, R.layout.fragment_pickup_parcel)
senderConstraintBody.clone(context, R.layout.fragment_pickup_sender)
receiverConstraintBody.clone(context, R.layout.fragment_pickup_receiver)
}
}
类PickupFragment:BaseFragment
(R.layout.fragment_拾取,PickupViewModel()){
private val primaryConstraintBody=ConstraintSet()
private val parcelConstraintBody=ConstraintSet()
private val senderConstraintBody=ConstraintSet()
私有val receiverConstraintBody=ConstraintSet()
惰性{binding.body}的私有val主体
private val pickupRequestStepObserver=观察者{step->
何时(步骤){
0->parcelConstraintBody.loading(主体)
1->发送器CONSTRAINTBODY.装载(车身)
2->接收约束主体。加载(主体)
}
}
重写变量(){
binding.viewModel=vModel
}
重写{
vModel.pickupRequestStep.observe(此为pickupRequestStepObserver)
}
覆盖视图(){
vModel.pickupRequestStep.value=0
primaryConstraintBody.clone(主体)
parcelConstraintBody.clone(上下文,R.layout.fragment\u pickup\u地块)
senderConstraintBody.clone(上下文,R.layout.fragment\u picku\u sender)
receiverConstraintBody.clone(上下文,R.layout.fragment\u拾取\u接收器)
}
}
碎片收集:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.chaparnet.chapar.views.pickup.PickupViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/body">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintBody"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
碎片提取包裹:
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<data>
<variable
name="viewModel"
type="com.chaparnet.chapar.views.pickup.PickupViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintBody"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".delivery_pickup.AddCargoFragment">
<TextView
android:id="@+id/txt_text_add_pickup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:layout_marginRight="16dp"
android:fontFamily="@font/main_bold"
android:text=" "
android:textColor="@color/colorPrimary"
android:textSize="18sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/txt_text_new_pickup_waybill"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_marginRight="16dp"
android:fontFamily="@font/main_medium"
android:text=""
android:textColor="@color/lightGray"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/txt_text_add_pickup" />
<EditText
android:id="@+id/et_new_pickup_waybill"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="24dp"
android:layout_marginRight="8dp"
android:background="@android:color/transparent"
android:fontFamily="@font/main_medium"
android:gravity="right"
android:inputType="number"
android:paddingLeft="16dp"
android:paddingTop="16dp"
android:paddingRight="100dp"
android:paddingBottom="16dp"
android:textColor="@color/darkGray"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/txt_text_add_pickup" />
<View
android:id="@+id/view_waybill"
android:layout_width="match_parent"
android:layout_height="@dimen/divider_height"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@color/lighterGray"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/et_new_pickup_waybill" />
<TextView
android:id="@+id/txt_text_new_pickup_closed_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:fontFamily="@font/main_medium"
android:text=" "
android:textColor="@color/lightGray"
android:textSize="14sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_waybill" />
<EditText
android:id="@+id/et_new_pickup_closed_count"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="8dp"
android:background="@android:color/transparent"
android:fontFamily="@font/main_medium"
android:gravity="right"
android:inputType="number"
android:paddingLeft="16dp"
android:paddingTop="16dp"
android:paddingRight="100dp"
android:paddingBottom="16dp"
android:text="@={viewModel.pickupClosedCount}"
android:textColor="@color/darkGray"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_waybill" />
<View
android:id="@+id/view_closed_count"
android:layout_width="match_parent"
android:layout_height="@dimen/divider_height"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@color/lighterGray"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/et_new_pickup_closed_count" />
<TextView
android:id="@+id/txt_text_new_pickup_kind_service"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:fontFamily="@font/main_medium"
android:text=" "
android:textColor="@color/lightGray"
android:textSize="14sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_closed_count" />
<Spinner
android:id="@+id/spinner_new_pickup_kind_service"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="14dp"
android:layout_marginRight="100dp"
android:paddingLeft="16dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_closed_count" />
<View
android:id="@+id/view_kind_service"
android:layout_width="match_parent"
android:layout_height="@dimen/divider_height"
android:layout_marginLeft="20dp"
android:layout_marginTop="16dp"
android:layout_marginRight="20dp"
android:background="@color/lighterGray"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/txt_text_new_pickup_kind_service" />
<TextView
android:id="@+id/txt_text_new_pickup_kind_rent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:fontFamily="@font/main_medium"
android:text=""
android:textColor="@color/lightGray"
android:textSize="14sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_kind_service" />
<!--<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/spinner_new_pickup_kind_rent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="100dp"
android:paddingLeft="16dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_kind_service" />-->
<RadioGroup
android:id="@+id/spinner_new_pickup_kind_rent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="10dp"
android:layout_marginRight="100dp"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="16dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_kind_service">
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginRight="16dp"
android:button="@null"
android:checked="@={viewModel.radioPasPayment}"
android:drawableRight="?android:attr/listChoiceIndicatorSingle"
android:fontFamily="@font/main_light"
android:layoutDirection="rtl"
android:text=""
android:textAlignment="textStart"
android:textSize="12sp" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:button="@null"
android:checked="@={viewModel.radioPishPayment}"
android:drawableRight="?android:attr/listChoiceIndicatorSingle"
android:fontFamily="@font/main_light"
android:layoutDirection="rtl"
android:text=""
android:textAlignment="textStart"
android:textSize="12sp" />
</RadioGroup>
<View
android:id="@+id/view_kind_rent"
android:layout_width="match_parent"
android:layout_height="@dimen/divider_height"
android:layout_marginLeft="20dp"
android:layout_marginTop="16dp"
android:layout_marginRight="20dp"
android:background="@color/lighterGray"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/txt_text_new_pickup_kind_rent" />
<!--<TextView
android:id="@+id/txt_text_new_service_percentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:fontFamily="@font/main_medium"
android:tag="check_for_visibility"
android:text="Service percent"
android:textColor="@color/lightGray"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_kind_rent" />
<EditText
android:id="@+id/et_new_pickup_service_percentage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="8dp"
android:background="@android:color/transparent"
android:fontFamily="@font/main_medium"
android:gravity="right"
android:inputType="number"
android:paddingLeft="16dp"
android:paddingTop="16dp"
android:paddingRight="100dp"
android:paddingBottom="16dp"
android:tag="check_for_visibility"
android:textColor="@color/darkGray"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_kind_rent" />
<View
android:id="@+id/view_kind_service_percentage"
android:layout_width="match_parent"
android:layout_height="@dimen/divider_height"
android:layout_marginLeft="20dp"
android:layout_marginTop="16dp"
android:layout_marginRight="20dp"
android:background="@color/lighterGray"
android:tag="check_for_visibility"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/txt_text_new_service_percentage" />-->
<TextView
android:id="@+id/txt_text_new_weight_of_goods"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:fontFamily="@font/main_medium"
android:tag="check_for_visibility"
android:text="weight"
android:textColor="@color/lightGray"
android:textSize="14sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_kind_rent" />
<EditText
android:id="@+id/et_new_pickup_weight_of_goods"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="8dp"
android:background="@android:color/transparent"
android:fontFamily="@font/main_medium"
android:gravity="right"
android:inputType="number"
android:paddingLeft="16dp"
android:paddingTop="16dp"
android:paddingRight="100dp"
android:paddingBottom="16dp"
android:tag="check_for_visibility"
android:text="@={viewModel.weightOfGoods}"
android:textColor="@color/darkGray"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_kind_rent" />
<View
android:id="@+id/view_weight_of_goods"
android:layout_width="match_parent"
android:layout_height="@dimen/divider_height"
android:layout_marginLeft="20dp"
android:layout_marginTop="16dp"
android:layout_marginRight="20dp"
android:background="@color/lighterGray"
android:tag="check_for_visibility"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/txt_text_new_weight_of_goods" />
<TextView
android:id="@+id/txt_text_new_value_of_goods"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:fontFamily="@font/main_medium"
android:tag="check_for_visibility"
android:text="Value"
android:textColor="@color/lightGray"
android:textSize="14sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_weight_of_goods" />
<EditText
android:id="@+id/et_new_pickup_value_of_goods"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="8dp"
android:background="@android:color/transparent"
android:fontFamily="@font/main_medium"
android:gravity="right"
android:inputType="number"
android:paddingLeft="16dp"
android:paddingTop="16dp"
android:paddingRight="100dp"
android:paddingBottom="16dp"
android:tag="check_for_visibility"
android:text="@={viewModel.valueOfGoods}"
android:textColor="@color/darkGray"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_weight_of_goods" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
另外两个片段类似于片段拾取发送器和片段拾取接收器,但具有不同的组件和ID。在我的fragment_拾取中,我将有一些按钮,其中包含下一步和上一步,用于更新步骤live data以切换XML布局。
请你指导我如何处理这件事好吗