Android 约束加权链赢得';一动不动
由于某些原因,未应用my ConstraintLayout项目的权重。我已经看过好几遍了,但我不确定哪里出了错 XMLAndroid 约束加权链赢得';一动不动,android,kotlin,android-constraintlayout,Android,Kotlin,Android Constraintlayout,由于某些原因,未应用my ConstraintLayout项目的权重。我已经看过好几遍了,但我不确定哪里出了错 XML <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/my_scrollView_LL" android:fillViewport="t
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_scrollView_LL"
android:fillViewport="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingStart="@dimen/activity_horizontal_margin"
android:paddingEnd="@dimen/activity_horizontal_margin">
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ScrollView>
Kotlin
class MyFragment : androidx.fragment.app.Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_sv, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
val v = view
val myCL = v!!.findViewById<ConstraintLayout>(R.id.my_constraintLayout)
val rlp1 = ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT)
val r = context!!.resources
val fourDp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4f, r.displayMetrics).toInt()
val tenDp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10f, r.displayMetrics).toInt()
/*
* CardView items
*/
val ivIcon = ImageView(context)
ivIcon.setImageResource(R.drawable.ic_warning)
ivIcon.setColorFilter((colorFTC), android.graphics.PorterDuff.Mode.SRC_IN)
ivIcon.layoutParams = rlp1
val tvText = TextView(context)
tvText.text = "Lorem ipsum dolor sit amet, eos aliquam vulputate percipitur ei."
TextViewCompat.setTextAppearance(tvText, android.R.style.TextAppearance_Medium)
tvText.layoutParams = rlp1
val cvMain = context?.let { CardView(it) }
when {
cvMain != null -> {
cvMain.radius = fourDp.toFloat()
cvMain.setContentPadding(tenDp, tenDp, tenDp, tenDp)
cvMain.useCompatPadding = true
cvMain.cardElevation = fourDp.toFloat()
}
}
cvMain!!.id = View.generateViewId()
ivIcon.id = View.generateViewId()
tvText.id = View.generateViewId()
myCL.addView(cvMain)
cvMain.addView(ivIcon)
cvMain.addView(tvText)
// Constraint Set
val set = ConstraintSet()
set.clone(myCL)
set.connect(cvMain.id, ConstraintSet.TOP, myCL.id, ConstraintSet.TOP, 0)
set.connect(ivIcon.id, ConstraintSet.START, myCL.id, ConstraintSet.START, 0)
set.connect(ivIcon.id, ConstraintSet.END, tvText.id, ConstraintSet.START, tenDp)
set.connect(tvText.id, ConstraintSet.START, ivIcon.id, ConstraintSet.END, tenDp)
set.connect(tvText.id, ConstraintSet.END, myCL.id, ConstraintSet.END, 0)
set.setHorizontalChainStyle(ivIcon.id, ConstraintSet.CHAIN_PACKED)
set.setHorizontalChainStyle(tvText.id, ConstraintSet.CHAIN_PACKED)
set.setHorizontalWeight(ivIcon.id, 10f)
set.setHorizontalWeight(ivIcon.id, 90f)
set.applyTo(myCL)
super.onActivityCreated(savedInstanceState)
}
}
classmyfragment:androidx.fragment.app.fragment(){
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
返回充气机。充气(R.layout.fragment_sv,容器,假)
}
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
val v=视图
val myCL=v!!.findViewById(R.id.my_constraintLayout)
val rlp1=ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_内容,ConstraintLayout.LayoutParams.WRAP_内容)
val r=context!!.resources
val fourDp=TypedValue.applyDimension(TypedValue.COMPLEX\u UNIT\u DIP,4f,r.displayMetrics).toInt()
val tenDp=TypedValue.applyDimension(TypedValue.COMPLEX\u UNIT\u DIP,10f,r.displayMetrics).toInt()
/*
*CardView项目
*/
val ivIcon=ImageView(上下文)
ivIcon.setImageResource(R.drawable.ic_警告)
ivIcon.setColorFilter((colorFTC),android.graphics.PorterDuff.Mode.SRC_-IN)
ivIcon.layoutParams=rlp1
val tvText=文本视图(上下文)
tvText.text=“Lorem ipsum door sit amet,eos aliquam vulputate percipitur ei。”
TextViewCompat.setTextAppearance(tvText,android.R.style.TextAppearance\u中位)
tvText.layoutParams=rlp1
val cvMain=context?.let{cardwiew(it)}
什么时候{
cvMain!=null->{
cvMain.radius=fourDp.toFloat()
cvMain.setContentPadding(tenDp,tenDp,tenDp,tenDp)
cvMain.useCompatding=true
cvMain.cardElevation=fourDp.toFloat()
}
}
cvMain!!.id=View.generateViewId()
ivIcon.id=View.generateViewId()
tvText.id=View.generateViewId()
myCL.addView(cvMain)
cvMain.addView(ivIcon)
cvMain.addView(tvText)
//约束集
val set=ConstraintSet()
set.clone(myCL)
set.connect(cvMain.id、ConstraintSet.TOP、myCL.id、ConstraintSet.TOP、0)
set.connect(ivIcon.id、ConstraintSet.START、myCL.id、ConstraintSet.START、0)
set.connect(ivIcon.id、ConstraintSet.END、tvText.id、ConstraintSet.START、tenDp)
set.connect(tvText.id、ConstraintSet.START、ivIcon.id、ConstraintSet.END、tenDp)
set.connect(tvText.id、ConstraintSet.END、myCL.id、ConstraintSet.END、0)
set.setHorizontalChainStyle(ivIcon.id,ConstraintSet.CHAIN_-PACKED)
set.setHorizontalChainStyle(tvText.id,ConstraintSet.CHAIN_-PACKED)
设置水平重量(ivIcon.id,10f)
设置水平重量(ivIcon.id,90f)
集合。应用于(myCL)
super.onActivityCreated(savedInstanceState)
}
}
约束仅适用于父视图的直接子视图ConstraintLayout
。在您的情况下,my_constraintLayout
只有一个子项,即cardwiew
。使用addView()
添加的ImageView
和TextView
是CardView
的子项,而不是ConstraintLayout
,因此您尝试设置的约束对它们没有影响
您需要在
CardView
中有一个ConstraintLayout
,以添加视图
并设置约束。约束仅适用于父ConstraintLayout
的直接子视图。在您的情况下,my_constraintLayout
只有一个子项,即cardwiew
。使用addView()
添加的ImageView
和TextView
是CardView
的子项,而不是ConstraintLayout
,因此您尝试设置的约束对它们没有影响
您需要在CardView
中有一个ConstraintLayout
,以添加视图
并设置约束