[Modify]首页和夺宝修改

This commit is contained in:
wushaocheng
2023-09-20 16:07:17 +08:00
parent 5db5afa5ed
commit ca62822bfb
15 changed files with 320 additions and 81 deletions

View File

@@ -0,0 +1,22 @@
package com.yizhuan.erban.home.adapter
import com.yizhuan.erban.R
import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2
import com.yizhuan.xchat_android_core.home.bean.BannerInfo
import com.zhpan.bannerview.BaseBannerAdapter
import com.zhpan.bannerview.BaseViewHolder
class HomeBannerAdapter : BaseBannerAdapter<BannerInfo?>() {
override fun getLayoutId(viewType: Int): Int {
return R.layout.activity_home_banner
}
override fun bindData(
helper: BaseViewHolder<BannerInfo?>,
item: BannerInfo?,
position: Int,
pageSize: Int
) {
ImageLoadUtilsV2.loadImage(helper.findViewById(R.id.iv_cover), item?.bannerPic)
}
}

View File

@@ -148,7 +148,7 @@ class AccompanyFragment : BaseViewBindingFragment<FragmentAccompanyBinding>() {
private fun showGameGuide(){
val userInfo = UserModel.get().cacheLoginUserInfo
if (userInfo?.isHasPermitRoom == true) {
binding.ivGameGuide.visibility = View.VISIBLE
binding.ivGameGuide.visibility = View.GONE
} else {
binding.ivGameGuide.visibility = View.GONE
}

View File

@@ -14,21 +14,25 @@ import com.yizhuan.erban.avroom.activity.AVRoomActivity
import com.yizhuan.erban.base.BaseViewBindingFragment
import com.yizhuan.erban.databinding.FragmentHomeBinding
import com.yizhuan.erban.home.HomeViewModel
import com.yizhuan.erban.home.adapter.HomeBannerAdapter
import com.yizhuan.erban.home.dialog.RecommendRoomDialog
import com.yizhuan.erban.home.helper.BannerHelper
import com.yizhuan.erban.home.helper.OpenRoomHelper
import com.yizhuan.erban.ui.im.avtivity.NimP2PMessageActivity
import com.yizhuan.erban.ui.search.SearchActivity
import com.yizhuan.erban.ui.user.adapter.MainIndicatorAdapter
import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2
import com.yizhuan.erban.ui.utils.load
import com.yizhuan.erban.ui.webview.CommonWebViewActivity
import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper
import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil
import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.yizhuan.erban.utils.CommonJumpHelper
import com.yizhuan.xchat_android_core.DemoCache
import com.yizhuan.xchat_android_core.UriProvider
import com.yizhuan.xchat_android_core.home.bean.BannerInfo
import com.yizhuan.xchat_android_core.home.bean.HomeTagInfo
import com.yizhuan.xchat_android_library.utils.ListUtils
import com.yizhuan.xchat_android_library.utils.ResUtil
import com.zhpan.bannerview.BannerViewPager
/**
* Peko首页
@@ -40,23 +44,40 @@ class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClic
private val mTabInfoList = mutableListOf<HomeTagInfo>()
private val homeViewModel: HomeViewModel by activityViewModels()
private var mBanner: BannerViewPager<BannerInfo>? = null
companion object {
private const val TAG = "HomeFragment"
}
override fun init() {
mBanner = view?.findViewById<BannerViewPager<BannerInfo>>(R.id.banner)
initTitleTab()
initListener()
homeViewModel.bannerLiveData.observe(this) {
it?.let {
BannerHelper.setBanner(binding.rollView, it) { _, _ ->
//首页_banner
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.SIX),
Pair(IReportConstants.MODULE, IReportConstants.PEKO_HOMEPAGE)
)
)
if (ListUtils.isListEmpty(it)) {
mBanner?.visibility = View.GONE
return@let
}
mBanner?.visibility = View.VISIBLE
mBanner?.adapter = HomeBannerAdapter()
mBanner?.post {
mBanner?.apply {
this.setPageMargin(UIUtil.dip2px(mContext, 8.0))
.setScrollDuration(800)
.setOnPageClickListener { _: View?, position: Int ->
//首页_banner
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.SIX),
Pair(IReportConstants.MODULE, IReportConstants.PEKO_HOMEPAGE)
)
)
CommonJumpHelper.bannerJump(context, it[position])
}
.create(it)
}
}
}
}

View File

@@ -1,12 +1,10 @@
package com.yizhuan.erban.treasurefairy.adapter
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yizhuan.erban.R
import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2
import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo
import com.yizhuan.xchat_android_core.treasurefairy.PropItemInfo
class ExchangeDebrisAdapter :
BaseQuickAdapter<ExchangeGiftInfo, BaseViewHolder>(R.layout.treasure_fairy_item_exchange_debris) {
@@ -15,18 +13,6 @@ class ExchangeDebrisAdapter :
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_prize_icon), item.rewardPicUrl)
helper.setText(R.id.tv_prize_name, item.getPrizeName())
val adapter: BaseQuickAdapter<PropItemInfo, BaseViewHolder> =
object : BaseQuickAdapter<PropItemInfo, BaseViewHolder>(R.layout.item_exchange_debris) {
override fun convert(helper: BaseViewHolder, item: PropItemInfo) {
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_icon), item.picUrl)
helper.setText(R.id.tv_num, "${item.propName}x${item.propNum}")
}
}
helper.getView<RecyclerView>(R.id.mRecyclerView).adapter = adapter
item.propItems?.let {
adapter.setNewData(it)
}
helper.addOnClickListener(R.id.tv_exchange)
}

View File

@@ -0,0 +1,33 @@
package com.yizhuan.erban.treasurefairy.adapter
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yizhuan.erban.R
import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2
import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo
import com.yizhuan.xchat_android_core.treasurefairy.PropItemInfo
class ExchangeSummonAdapter :
BaseQuickAdapter<ExchangeGiftInfo, BaseViewHolder>(R.layout.treasure_fairy_item_exchange_summon) {
override fun convert(helper: BaseViewHolder, item: ExchangeGiftInfo) {
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_prize_icon), item.rewardPicUrl)
helper.setText(R.id.tv_prize_name, item.getPrizeName())
val adapter: BaseQuickAdapter<PropItemInfo, BaseViewHolder> =
object : BaseQuickAdapter<PropItemInfo, BaseViewHolder>(R.layout.item_exchange_debris) {
override fun convert(helper: BaseViewHolder, item: PropItemInfo) {
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_icon), item.picUrl)
helper.setText(R.id.tv_num, "${item.propName}x${item.propNum}")
}
}
helper.getView<RecyclerView>(R.id.mRecyclerView).adapter = adapter
item.propItems?.let {
adapter.setNewData(it)
}
helper.addOnClickListener(R.id.tv_exchange)
}
}

View File

@@ -13,6 +13,7 @@ import com.yizhuan.erban.databinding.TreasureFairyDialogExchangeBinding
import com.yizhuan.erban.treasurefairy.FairyViewModel
import com.yizhuan.erban.treasurefairy.fragment.ExchangeDebrisFragment
import com.yizhuan.erban.treasurefairy.fragment.ExchangeFairyFragment
import com.yizhuan.erban.treasurefairy.fragment.ExchangeSummonFragment
class ExchangeFairyDialog : BaseDialog<TreasureFairyDialogExchangeBinding>() {
@@ -56,8 +57,8 @@ class ExchangeFairyDialog : BaseDialog<TreasureFairyDialogExchangeBinding>() {
binding?.viewPager?.adapter = RoomVPAdapter(
childFragmentManager,
listOf(
ExchangeDebrisFragment.newInstance(1),
ExchangeDebrisFragment.newInstance(2)
ExchangeSummonFragment.newInstance(),
ExchangeDebrisFragment.newInstance()
)
)
viewModel.getMyFairyInfo()

View File

@@ -2,7 +2,9 @@ package com.yizhuan.erban.treasurefairy.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.viewModels
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.yizhuan.erban.R
@@ -22,21 +24,18 @@ class ExchangeDebrisFragment :
BaseViewBindingFragment<TreasureFairyFragmentExchangeDebrisBinding>() {
companion object {
fun newInstance(fairyType: Int): ExchangeDebrisFragment {
fun newInstance(): ExchangeDebrisFragment {
val args = Bundle()
args.putInt("fairyType", fairyType)
val fragment = ExchangeDebrisFragment()
fragment.arguments = args
return fragment
}
}
private val viewModel: FairyViewModel by activityViewModels()
private val viewModel: FairyViewModel by viewModels()
private lateinit var rvDelegate: RVDelegate<ExchangeGiftInfo>
private lateinit var debrisAdapter: ExchangeDebrisAdapter
private val fairyType by lazy { requireArguments().getInt("fairyType", 1) }
@SuppressLint("CheckResult")
override fun init() {
debrisAdapter = ExchangeDebrisAdapter()
@@ -51,11 +50,6 @@ class ExchangeDebrisFragment :
)
.setLayoutManager(GridLayoutManager(context, 2, LinearLayoutManager.VERTICAL, false))
.build()
if(fairyType == 1){
viewModel.getFairyCallList()
} else {
viewModel.getDebrisExchangeList()
}
viewModel.fairyCallInfoLiveData.observe(viewLifecycleOwner) {
rvDelegate.setNewData(it)
}
@@ -70,6 +64,7 @@ class ExchangeDebrisFragment :
}
}
viewModel.getDebrisExchangeList()
viewModel.getMyFairyInfo()
viewModel.myFairyInfoLiveData.observe(viewLifecycleOwner) {

View File

@@ -0,0 +1,89 @@
package com.yizhuan.erban.treasurefairy.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.viewModels
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.yizhuan.erban.R
import com.yizhuan.erban.base.BaseViewBindingFragment
import com.yizhuan.erban.common.EmptyViewHelper
import com.yizhuan.erban.databinding.TreasureFairyFragmentExchangeDebrisBinding
import com.yizhuan.erban.treasurefairy.FairyViewModel
import com.yizhuan.erban.treasurefairy.adapter.ExchangeDebrisAdapter
import com.yizhuan.erban.treasurefairy.adapter.ExchangeSummonAdapter
import com.yizhuan.erban.ui.utils.RVDelegate
import com.yizhuan.erban.ui.utils.loadAvatar
import com.yizhuan.xchat_android_core.treasurefairy.ExchangeGiftInfo
import com.yizhuan.xchat_android_core.user.UserModel
import com.yizhuan.xchat_android_core.utils.subAndReplaceDot
import com.yizhuan.xchat_android_core.utils.toast
class ExchangeSummonFragment :
BaseViewBindingFragment<TreasureFairyFragmentExchangeDebrisBinding>() {
companion object {
fun newInstance(): ExchangeSummonFragment {
val args = Bundle()
val fragment = ExchangeSummonFragment()
fragment.arguments = args
return fragment
}
}
private val viewModel: FairyViewModel by viewModels()
private lateinit var rvDelegate: RVDelegate<ExchangeGiftInfo>
private lateinit var exchangeSummonAdapter: ExchangeSummonAdapter
@SuppressLint("CheckResult")
override fun init() {
exchangeSummonAdapter = ExchangeSummonAdapter()
rvDelegate = RVDelegate.Builder<ExchangeGiftInfo>()
.setAdapter(exchangeSummonAdapter)
.setRecyclerView(binding.recyclerView)
.setEmptyView(
EmptyViewHelper.createEmptyTextViewNoImage(
context,
getString(R.string.fairy_no_further_data_is_available)
)
)
.setLayoutManager(GridLayoutManager(context, 2, LinearLayoutManager.VERTICAL, false))
.build()
viewModel.fairyCallInfoLiveData.observe(viewLifecycleOwner) {
rvDelegate.setNewData(it)
}
viewModel.debrisExchangeListLiveData.observe(viewLifecycleOwner) {
rvDelegate.setNewData(it)
}
exchangeSummonAdapter.setOnItemChildClickListener { _, _, position ->
exchangeSummonAdapter.getItem(position)?.let {
dialogManager.showTipsDialog("您將要兌換“${it.getPrizeName()}", "兌換") {
viewModel.debrisExchange(it.itemId)
}
}
}
viewModel.getFairyCallList()
viewModel.getMyFairyInfo()
viewModel.myFairyInfoLiveData.observe(viewLifecycleOwner) {
it?.let {
binding.tvDebrisNum.text = it.chipNum.toString()
}
}
UserModel.get().cacheLoginUserInfo?.let {
binding.ivAvatar.loadAvatar(it.avatar)
binding.tvNickname.text = it.nick.subAndReplaceDot(7)
}
viewModel.debrisExchangeLiveData.observe(viewLifecycleOwner) {
it?.getContentIfNotHandled()?.let {
"兌換成功~".toast()
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,24 @@
<?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/ll_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/iv_cover"
android:layout_width="match_parent"
android:layout_height="0dp"
android:scaleType="centerCrop"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:riv_corner_radius_bottom_left="8dp"
app:riv_corner_radius_bottom_right="8dp"
app:riv_corner_radius_top_left="8dp"
app:riv_corner_radius_top_right="8dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -20,10 +20,10 @@
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingTop="40dp"
android:paddingBottom="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_40"
android:layout_marginBottom="@dimen/dp_12"
app:layout_constraintTop_toTopOf="parent">
<com.coorchice.library.SuperTextView
@@ -31,39 +31,37 @@
android:layout_width="0dp"
android:layout_height="@dimen/dp_32"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_36"
android:layout_marginEnd="@dimen/dp_15"
android:layout_weight="1"
android:drawablePadding="@dimen/dp_8"
android:drawablePadding="@dimen/dp_6"
android:gravity="center_vertical"
android:paddingStart="@dimen/dp_13"
android:paddingEnd="0dp"
android:text="@string/search_id_room"
android:textColor="@color/color_B8B7C7"
android:textSize="@dimen/sp_12"
android:drawableStart="@drawable/ic_home_search"
app:solid="@color/color_FAFBFC"
app:corner="@dimen/dp_16"
app:drawableStartCompat="@drawable/ic_home_search" />
<ImageView
android:id="@+id/iv_my_room"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginBottom="2dp"
android:adjustViewBounds="true"
android:scaleType="center"
android:src="@drawable/ic_home_my_room" />
app:corner="@dimen/dp_16" />
<ImageView
android:id="@+id/iv_ranking"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginBottom="2dp"
android:layout_marginEnd="@dimen/dp_12"
android:adjustViewBounds="true"
android:scaleType="center"
android:src="@drawable/ic_home_rank" />
<ImageView
android:id="@+id/iv_my_room"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_15"
android:adjustViewBounds="true"
android:scaleType="center"
android:src="@drawable/ic_home_my_room" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
@@ -104,19 +102,22 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.yizhuan.erban.ui.widget.viewpager.ScrollViewPager
android:id="@+id/roll_view"
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/banner"
android:layout_width="0dp"
android:layout_height="0dp"
app:bvp_can_loop="true"
app:bvp_auto_play="true"
app:bvp_page_style="multi_page_scale"
app:bvp_indicator_visibility="visible"
android:visibility="gone"
tools:visibility="visible"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_15"
android:layout_marginBottom="@dimen/dp_2"
android:visibility="gone"
app:rollviewpager_hint_mode="number"
app:rollviewpager_hint_gravity="center"
app:rollviewpager_hint_paddingBottom="8dp"
app:rollviewpager_hint_color="@color/color_9168FA"
tools:visibility="visible"
app:bvp_indicator_checked_color="@color/color_9168FA"
app:bvp_indicator_normal_color="@color/color_B3B3C3"
app:bvp_indicator_radius="@dimen/dp_4"
app:layout_constraintDimensionRatio="345:80"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -130,7 +131,6 @@
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_25"
android:layout_marginTop="@dimen/dp_8"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_12" />
<androidx.viewpager2.widget.ViewPager2

View File

@@ -21,7 +21,9 @@
android:id="@+id/mRecyclerRoom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_6"
android:layout_marginStart="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_8"
android:overScrollMode="never"
android:scrollbars="none"
app:spanCount="2"

View File

@@ -82,9 +82,12 @@
android:layout_marginTop="@dimen/dp_10"
android:textColor="@color/color_1F1B4F"
android:textSize="14sp"
android:lines="1"
android:ellipsize="end"
android:maxEms="8"
app:layout_constraintStart_toEndOf="@id/iv_avatar"
app:layout_constraintTop_toTopOf="@id/view_bg"
tools:text="余生点唱歌曲" />
tools:text="余生点唱歌曲京东卡数据接口的萨拉卡死" />
<LinearLayout
android:id="@+id/ll_gender_age"

View File

@@ -16,7 +16,7 @@
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_exchange_debris_item"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="332:467"
app:layout_constraintDimensionRatio="338:450"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -46,29 +46,18 @@
app:layout_constraintTop_toTopOf="parent"
tools:text="我的可愛頭飾(1天)" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecyclerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="3dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_prize_name"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
<TextView
android:id="@+id/tv_exchange"
android:layout_width="80dp"
android:layout_height="25dp"
android:layout_marginTop="8dp"
android:background="@drawable/shape_3aeac7_to_fffebb_4dp"
android:background="@drawable/treasure_exchange_bg"
android:gravity="center"
android:text="@string/fairy_convert"
android:textColor="@color/color_1f5764"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/mRecyclerView" />
app:layout_constraintTop_toBottomOf="@id/tv_prize_name" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,74 @@
<?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="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="8dp"
android:gravity="center_horizontal"
android:orientation="vertical">
<View
android:id="@+id/view_bg"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/treasure_fairy_bg_exchange_debris_item"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="338:484"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_prize_icon"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.325"
app:layout_constraintWidth_percent="0.40" />
<TextView
android:id="@+id/tv_prize_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintVertical_bias="0.60"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="我的可愛頭飾(1天)" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecyclerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="2dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_prize_name"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
<TextView
android:id="@+id/tv_exchange"
android:layout_width="80dp"
android:layout_height="25dp"
android:layout_marginTop="2dp"
android:background="@drawable/treasure_exchange_bg"
android:gravity="center"
android:text="@string/fairy_convert"
android:textColor="@color/color_1f5764"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/mRecyclerView" />
</androidx.constraintlayout.widget.ConstraintLayout>