我有三个自定义视图:SmallBannerView、LargeBannerView 以及作为前两个视图基础的 BannerView。分别,前两个视图按其应有的方式显示,但是当我将它们附加到 BannerView 时,一切都崩溃了:由于某种原因,它们开始向左边框“收缩”,并且尝试增加宽度没有任何效果,仅包围视图的框架增加。
SmallBannerView 标记:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="88dp"
android:layout_height="88dp"
android:id="@+id/small_banner_view"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/small_banner_card">
<ImageView
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_margin="4dp"
android:id="@+id/image"
android:layout_width="35dp"
android:layout_height="35dp"
tools:src="@drawable/bonus_badge"/>
<TextView
android:id="@+id/right_title"
android:layout_marginTop="4dp"
android:layout_marginHorizontal="6dp"
app:layout_constraintTop_toBottomOf="@id/image"
android:layout_width="match_parent"
android:layout_height="14dp"
android:textColor="@color/black"
tools:text="Акции"
android:textSize="12sp"
android:fontFamily="sans-serif-medium"
android:gravity="end"
android:includeFontPadding="false"
android:maxLines="1"
android:ellipsize="end"/>
<TextView
android:id="@+id/left_title"
android:layout_marginTop="6dp"
android:layout_marginHorizontal="10dp"
app:layout_constraintTop_toBottomOf="@id/right_title"
android:textStyle="bold"
android:layout_width="match_parent"
android:layout_height="20dp"
android:textColor="@color/black"
tools:text="2 в 1"
android:textSize="16sp"
android:fontFamily="sans-serif-medium"
android:gravity="start"
android:includeFontPadding="false"
android:maxLines="1"
android:ellipsize="end"/>
</androidx.constraintlayout.widget.ConstraintLayout>
LargeBannerView 标记:
<?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/large_banner_view"
android:layout_width="match_parent"
android:layout_height="88dp"
android:background="@drawable/large_banner_card">
<ImageView
android:id="@+id/image"
android:layout_width="190dp"
android:layout_height="40dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:src="@drawable/banner_1_img" />
<TextView
android:layout_marginTop="4dp"
android:layout_marginHorizontal="12dp"
android:id="@+id/title"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="18dp"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="@color/black"
tools:text="Мангоооооо 100% бонусов"
app:layout_constraintTop_toBottomOf="@id/image"
android:includeFontPadding="false"
android:maxLines="1"
android:ellipsize="end"/>
<TextView
android:layout_marginBottom="4dp"
android:layout_marginHorizontal="32dp"
android:layout_width="match_parent"
android:layout_height="20dp"
android:textSize="8sp"
android:id="@+id/description"
android:textColor="@color/black"
app:layout_constraintTop_toBottomOf="@+id/title"
tools:text="Покупайте что-то по что-то и что-то что-то по что-то и что-точто-то "
android:includeFontPadding="false"
android:maxLines="2"
android:ellipsize="end"/>
</androidx.constraintlayout.widget.ConstraintLayout>
横幅视图标记:
<?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:layout_width="match_parent"
android:layout_height="88dp"
android:layout_marginVertical="10dp"
android:layout_marginHorizontal="20dp">
<com.prod.solution.impl.ui.banner.LargeBannerView
android:id="@+id/large"
android:layout_width="300dp"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="0dp" />
<com.prod.solution.impl.ui.banner.SmallBannerView
android:id="@+id/small"
android:layout_width="88dp"
android:layout_height="match_parent"
app:layout_constraintStart_toEndOf="@+id/large"
tools:layout_editor_absoluteY="0dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
这也是 BannerView 代码:
class BannerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : RelativeLayout(context, attrs, defStyleAttr) {
private var binding: BannerViewBinding
init {
binding = BannerViewBinding.inflate(LayoutInflater.from(context))
addView(binding.root)
}
fun setupBanner(model: BannerUiModel) {
binding.large.setUpLarge(model.largeBanner)
binding.small.setUpSmall(model.smallBanner)
}
}
class LargeBannerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : RelativeLayout(context, attrs, defStyleAttr) {
private var binding: LargeBannerViewBinding
init {
binding = LargeBannerViewBinding.inflate(LayoutInflater.from(context))
addView(binding.root)
}
fun setUpLarge(model: LargeBannerUiModel) {
binding.title.text = model.title
binding.description.text = model.description
binding.image.setImageDrawable(AppCompatResources.getDrawable(context, model.imageResId))
}
}
class SmallBannerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : RelativeLayout(context, attrs, defStyleAttr) {
private var binding: SmallBannerViewBinding
init {
binding = SmallBannerViewBinding.inflate(LayoutInflater.from(context))
addView(binding.root)
}
fun setUpSmall(model: SmallBannerUiModel?) {
binding.rightTitle.text = model?.rightLabel
binding.leftTitle.text = model?.leftLabel
val imageId = model?.imageResId
if (imageId != null)
binding.image.setImageDrawable(AppCompatResources.getDrawable(context, imageId))
}
}
我尝试删除 maxLines 和 ellipsize 参数,但这没有帮助。