У меня есть функция, которая динамически создает относительные макеты в зависимости от того, сколько AppliedGiftCard
объектов у меня в корзине -
override fun initAllGiftsCards(cartModel: CartModel) {
if (cartModel.appliedGiftCards.isNotEmpty()) {
/*Starting index is the index in which we start to add the dynamic linear layouts that represents products attributes.
This number should be incremented by 1 every time we do any hardcoded changes(more specifically, adding views) to `activity_checkout.xml`
file otherwise e the dynamic views will be created in the wrong place.
*/
var startingIndex = 14
cartModel.appliedGiftCards.forEach lit@{
//we hold a list of strings that are the gift card codes we apply. If we have any duplicates we continue to the next iteration.
if (appliedGiftCardCodes.contains(it.code)) {
return@lit
} else {
appliedGiftCardCodes.add(it.code)
}
//root gift card layout
val giftCardRelativeLayout = RelativeLayout(this)
// Layout Params //
//root gift card layout params
val giftCardLayoutParams = RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
//close imageview layout params
val imageViewParams = RelativeLayout.LayoutParams(ViewUtils.dpToPx(15), ViewUtils.dpToPx(15))
imageViewParams.marginStart = ViewUtils.dpToPx(14)
imageViewParams.addRule(RelativeLayout.CENTER_VERTICAL)
//gift card textview layout params
val giftCardTextViewParams = RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
giftCardTextViewParams.addRule(RelativeLayout.CENTER_VERTICAL)
giftCardLayoutParams.marginStart = ViewUtils.dpToPx(21)
//remaining gift card money layout params
val remainingTextViewParams = RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
remainingTextViewParams.addRule(RelativeLayout.ALIGN_PARENT_END)
remainingTextViewParams.addRule(RelativeLayout.CENTER_HORIZONTAL)
remainingTextViewParams.addRule(RelativeLayout.CENTER_VERTICAL)
remainingTextViewParams.marginEnd = ViewUtils.dpToPx(14)
//deletion progress bar layout params
val deletionProgressBarParams = RelativeLayout.LayoutParams(1, 1)
deletionProgressBarParams.marginStart = ViewUtils.dpToPx(140)
deletionProgressBarParams.topMargin = ViewUtils.dpToPx(14)
deletionProgressBarParams.addRule(RelativeLayout.CENTER_IN_PARENT)
// Views //
val deletionProgressBar = ProgressBar(this)
deletionProgressBar.visibility = View.GONE
//close imageview
val closeImageView = ImageView(this)
closeImageView.setPadding(10,10,10,10)
closeImageView.setBackgroundResource(R.drawable.close_black)
closeImageView.layoutParams = imageViewParams
/*we put the ID of the gift card in the tag of the image so when we click on the
image we can use it to delete the relevant card*/
closeImageView.tag = it.id
closeImageView.setOnClickListener {
ViewUtils.changeViewVisibility(deletionProgressBar, closeImageView)
val couponIdForDeletion = it.tag.toString().toInt()
DiscountsNetworking.removeGiftCardCode(token, couponIdForDeletion, object : DiscountsNetworking.OnAppliedCouponToCartListener {
override fun onApply() {
ViewUtils.changeViewVisibility(closeImageView, deletionProgressBar)
discountAndGiftViewGroup.removeViewAt(discountAndGiftViewGroup.indexOfChild(it.parent as View))
}
override fun onFailure(reason: String) {
ViewUtils.changeViewVisibility(closeImageView, deletionProgressBar)
Snackbar.make(discountAndGiftViewGroup, reason, Snackbar.LENGTH_SHORT).show()
}
})
}
//gift card textview
val giftCardTextView = TextView(this)
giftCardTextView.setPadding(ViewUtils.dpToPx(15), ViewUtils.dpToPx(15), ViewUtils.dpToPx(15), ViewUtils.dpToPx(15))
giftCardTextView.layoutParams = giftCardLayoutParams
val giftCardText = "Gift Card:\n(${it.code})"
giftCardTextView.text = giftCardText
// remaining gift card money textview -
val remainingTextView = TextView(this)
remainingTextView.layoutParams = remainingTextViewParams
remainingTextView.text = it.remainingAmount.plus(" remaining")
//adding to main gift card layout -
giftCardRelativeLayout.addView(closeImageView)
giftCardRelativeLayout.addView(giftCardTextView)
giftCardRelativeLayout.addView(remainingTextView)
giftCardRelativeLayout.addView(deletionProgressBar)
discountAndGiftViewGroup.addView(giftCardRelativeLayout, startingIndex)
startingIndex++
giftCardList.add(it)
}
} else {
//giftCardCouponViewGroup.visibility = View.GONE
giftCardList.clear()
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что при отображении индикатора выполнения , это выглядит так -
![enter image description here](https://i.stack.imgur.com/rJlB5.png)
И то, что я хотел, чтобы это выглядело, было, чтобы он был такого же размера, как при просмотре близкого изображения и на та же позиция.
Я попытался изменить параметры макета, попытался поиграть со значениями от dp до пикселя туда-сюда, попытался применить правило CENTER_IN_PARENT
, и ничто не изменило размер или положение этого ProgressBar.
Чего мне не хватает?