Динамически создаваемый ProgressBar слишком большой и не перемещается в другое место, несмотря на то, что я наложил поля и правила на его LayoutParams - PullRequest
0 голосов
/ 29 января 2020

У меня есть функция, которая динамически создает относительные макеты в зависимости от того, сколько 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

И то, что я хотел, чтобы это выглядело, было, чтобы он был такого же размера, как при просмотре близкого изображения и на та же позиция.

Я попытался изменить параметры макета, попытался поиграть со значениями от dp до пикселя туда-сюда, попытался применить правило CENTER_IN_PARENT, и ничто не изменило размер или положение этого ProgressBar.

Чего мне не хватает?

...