diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index 7d1af5fd42..9472ce6245 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -13,12 +13,6 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.content.ContextCompat; -import androidx.databinding.BindingAdapter; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; - import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.OnViewClickListener; import com.gh.common.constant.Config; @@ -71,6 +65,12 @@ import java.text.SimpleDateFormat; import java.util.List; import java.util.Locale; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; +import androidx.databinding.BindingAdapter; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + /** * Created by khy on 12/02/18. */ @@ -198,6 +198,17 @@ public class BindingAdapters { } } + @BindingAdapter("textColorFromString") + public static void textColorFromString(TextView tv, String hexString) { + if (TextUtils.isEmpty(hexString)) return; + + try { + tv.setTextColor(Color.parseColor(hexString)); + } catch (Exception e) { + e.printStackTrace(); + } + } + @BindingAdapter("visibleGone") public static void showHide(View view, Boolean show) { if (show != null && show) { @@ -207,6 +218,15 @@ public class BindingAdapters { } } + @BindingAdapter("goneIf") + public static void goneIf(View view, Boolean gone) { + if (gone != null && gone) { + view.setVisibility(View.GONE); + } else { + view.setVisibility(View.VISIBLE); + } + } + @BindingAdapter("visibleInvisible") public static void visibleInvisible(View view, Boolean show) { if (show != null && show) { diff --git a/app/src/main/java/com/gh/gamecenter/entity/FunctionalGroupEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/FunctionalGroupEntity.kt index bfbdad4562..41dde26b92 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/FunctionalGroupEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/FunctionalGroupEntity.kt @@ -2,6 +2,7 @@ package com.gh.gamecenter.entity import androidx.annotation.DrawableRes import com.google.gson.annotations.SerializedName +import kotlinx.android.parcel.Parcelize data class FunctionalGroupEntity( @SerializedName("_id") @@ -11,12 +12,12 @@ data class FunctionalGroupEntity( var addons: ArrayList = ArrayList() ) +@Parcelize data class FunctionalLinkEntity( @SerializedName("_id") var id: String = "", var active: Boolean = false, var category: String = "", - var icon: String = "",// 客户端展示的icon @DrawableRes var iconRes: Int = 0, // 客户端展示的icon @SerializedName("remind_switch") diff --git a/app/src/main/java/com/gh/gamecenter/entity/LinkEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/LinkEntity.kt index a1b5f3a207..00701827fc 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/LinkEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/LinkEntity.kt @@ -11,6 +11,7 @@ open class LinkEntity( var image: String? = "", var link: String? = "", var type: String? = "", + var icon: String = "", var text: String? = "", var value: String? = "", @SerializedName("community_id") diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescAdapter.kt index 285abc8ae6..12c6b88250 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescAdapter.kt @@ -23,7 +23,6 @@ import com.gh.gamecenter.R import com.gh.gamecenter.SuggestionActivity import com.gh.gamecenter.adapter.viewholder.FooterViewHolder import com.gh.gamecenter.adapter.viewholder.GameDetailIntroViewHolder -import com.gh.gamecenter.adapter.viewholder.GameDetailPluginViewHolder import com.gh.gamecenter.databinding.* import com.gh.gamecenter.entity.* import com.gh.gamecenter.eventbus.EBReuse @@ -33,6 +32,7 @@ import com.gh.gamecenter.gamedetail.entity.DetailEntity import com.gh.gamecenter.gamedetail.entity.GameInfo import com.gh.gamecenter.gamedetail.entity.NewGameDetailEntity import com.gh.gamecenter.gamedetail.entity.UpdateContent +import com.gh.gamecenter.gamedetail.entity.* import com.gh.gamecenter.gamedetail.fuli.kaifu.ServersCalendarActivity import com.gh.gamecenter.gamedetail.history.HistoryApkListActivity import com.gh.gamecenter.home.amway.LeftPagerSnapHelper @@ -79,25 +79,20 @@ class DescAdapter(context: Context, "libao" -> LIBAO "article" -> INFO_RAIDERS "related_game" -> RECOMMENDED_GAMES + "custom_column" -> CUSTOM_COLUMN + "notice" -> NOTICE else -> FOOTER } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { - INTRO -> { - val view = mLayoutInflater.inflate(R.layout.gamedetail_item_intro, parent, false) - GameDetailIntroViewHolder(view) - } COMMENTS -> { GameDetailCommentsViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.gamedetail_item_comments, parent, false)) } CUSTOM_COLUMN -> { - val view = mLayoutInflater.inflate(R.layout.gamedetail_item_custom_column, parent, false) - GameDetailCustomColumnViewHolder(view) + GameDetailCustomColumnViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.gamedetail_item_custom_column, parent, false)) } - - IMAGE -> { GameDetailRecommendImageViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.gamedetail_item_image, parent, false)) } @@ -128,6 +123,9 @@ class DescAdapter(context: Context, RECOMMENDED_GAMES -> { GamesRecommendedGalleryViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.game_gallery_list, parent, false)) } + NOTICE -> { + GameDetailNoticeViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.gamedetail_item_desc_notice, parent, false)) + } FOOTER -> { val view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false) FooterViewHolder(view) @@ -141,9 +139,9 @@ class DescAdapter(context: Context, override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { -// is GameDetailIntroViewHolder -> initIntroViewHolder(holder, descItemList[position]) + is GameDetailNoticeViewHolder -> bindNoticeViewHolder(holder, descItemList[position].noticeList!!) -// is GameDetailCustomColumnViewHolder -> bindCustomColumnViewHolder(holder, descItemList[position]) + is GameDetailCustomColumnViewHolder -> bindCustomColumnViewHolder(holder, descItemList[position].customColumn!!) is GamesRecommendedGalleryViewHolder -> bindGamesRecommendedGalleryViewHolder(holder, position) @@ -167,7 +165,6 @@ class DescAdapter(context: Context, is GameRaidersGalleryViewHolder -> bindRaidersViewHolder(holder, descItemList[position].article) - is FooterViewHolder -> { holder.loading.visibility = View.GONE holder.hint.setText(R.string.game_suggestion_hint) @@ -184,19 +181,15 @@ class DescAdapter(context: Context, return descItemList.size } - private fun bindCustomColumnViewHolder(viewHolder: GameDetailCustomColumnViewHolder, descItemData: DescItemData) { - val customColumn = descItemData.customColumn!! + private fun bindNoticeViewHolder(holder: GameDetailNoticeViewHolder, noticeList: ArrayList) { + // TODO 多行公告 + } - viewHolder.gamedetailPluginTitle.text = customColumn.name - viewHolder.gameDetailPluginRv.isNestedScrollingEnabled = false + private fun bindCustomColumnViewHolder(viewHolder: GameDetailCustomColumnViewHolder, customColumn: CustomColumn) { + // TODO 记录展开情况, 1:2 图片, 标签换行, 多栏目圆角处理, 将游戏简介转化特定的自定义栏目 + viewHolder.binding.customColumn = customColumn - val tips = when { - customColumn.title != null -> customColumn.title?.titleToTips(customColumn.des) - customColumn.des.isNotEmpty() -> TipsEntity(icon = null, title = TitleEntity(), content = customColumn.des) - else -> null - } - - val tags = if (customColumn.showInfoTag) { + val tags = if (customColumn.showInfoTag == true) { customColumn.infoTag } else { arrayListOf() @@ -204,67 +197,20 @@ class DescAdapter(context: Context, val linearLayoutManager = LinearLayoutManager(mContext) val gridLayoutManager = GridLayoutManager(mContext, 3) - gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { - override fun getSpanSize(position: Int): Int { - return if (tips?.title != null) { - if (position == 0) 3 else 1 - } else { - 1 - } - } - } - if (tags.size == 0) { - if (tips?.content != null && tips.content!!.length > 80) { - viewHolder.gamedetailPluginOpen.visibility = View.VISIBLE - } else { - viewHolder.gamedetailPluginOpen.visibility = View.GONE - } - } - - if (mExpandSparseBooleanArray[viewHolder.adapterPosition]) { - if (customColumn.showInfoTagDes) { - viewHolder.gameDetailPluginRv.layoutManager = linearLayoutManager - } else { - viewHolder.gameDetailPluginRv.layoutManager = gridLayoutManager - } - viewHolder.gamedetailPluginExpandIv.setImageResource(R.drawable.ic_up_arrow) + if (customColumn.showInfoTagDes == true) { + viewHolder.binding.recyclerview.layoutManager = linearLayoutManager } else { - viewHolder.gameDetailPluginRv.layoutManager = gridLayoutManager - viewHolder.gamedetailPluginExpandIv.setImageResource(R.drawable.ic_down_arrow) + viewHolder.binding.recyclerview.layoutManager = gridLayoutManager } - viewHolder.gamedetailPluginOpen.setOnClickListener { - mExpandSparseBooleanArray.append(viewHolder.adapterPosition, !mExpandSparseBooleanArray[viewHolder.adapterPosition]) - notifyItemChanged(viewHolder.adapterPosition) - } - - viewHolder.gameDetailPluginRv.adapter = GameDetailCustomColumnAdapter( - tags, - tips, - mExpandSparseBooleanArray[viewHolder.adapterPosition], - customColumn.showInfoTagDes, - mContext) - - if (customColumn.link != null) { - viewHolder.gamedetailPluginLinkTv.visibility = View.VISIBLE - viewHolder.gamedetailPluginLinkIv.visibility = View.VISIBLE - viewHolder.gamedetailPluginLinkTv.text = customColumn.link?.value - - viewHolder.gamedetailPluginLinkIv.setOnClickListener { - viewHolder.gamedetailPluginLinkTv.performClick() - } - viewHolder.gamedetailPluginLinkTv.setOnClickListener { - if (customColumn.link!!.type.equals("feedback")) { - SuggestionActivity.startSuggestionActivity(mContext, SuggestType.gameQuestion, "game", gameName) - } else { - MtaHelper.onEvent("游戏详情_新", "自定义栏目跳转", "${gameName}-${customColumn.name}-${customColumn.link?.text}") - DirectUtils.directToLinkPage(mContext, customColumn.link!!, mEntrance, "游戏详情自定义栏目") - } + if (viewHolder.binding.recyclerview.adapter == null) { + viewHolder.binding.recyclerview.adapter = GameDetailCustomColumnAdapter(mContext).apply { + updateData(ArrayList(tags!!), mExpandSparseBooleanArray[viewHolder.adapterPosition]) } } else { - viewHolder.gamedetailPluginLinkTv.visibility = View.GONE - viewHolder.gamedetailPluginLinkIv.visibility = View.GONE + (viewHolder.binding.recyclerview.adapter as GameDetailCustomColumnAdapter) + .updateData(ArrayList(tags!!), mExpandSparseBooleanArray[viewHolder.adapterPosition]) } } @@ -337,7 +283,6 @@ class DescAdapter(context: Context, } } - //绑定大家都在玩 private fun bindGamesRecommendedGalleryViewHolder(viewHolder: GamesRecommendedGalleryViewHolder, position: Int) { viewHolder.binding.galleryRv.isNestedScrollingEnabled = false @@ -563,7 +508,6 @@ class DescAdapter(context: Context, addItemDecoration(GridSpacingItemColorDecoration(context, 12, 16, R.color.transparent)) } } - } private fun createGameInfoLabel(label: String): TextView { @@ -578,10 +522,10 @@ class DescAdapter(context: Context, } companion object { - const val INTRO = 4 const val HEADER = 6 - const val CUSTOM_COLUMN = 64 + const val DES = 4 // 游戏介绍 + const val CUSTOM_COLUMN = 64 // 自定义栏目 const val RELATED_VERSION = 128//其他相关版本 const val COMMENTS = 8//评论 const val IMAGE = 3//图片推荐 @@ -593,14 +537,17 @@ class DescAdapter(context: Context, const val INFO_RAIDERS = 133//资讯攻略 const val LIBAO = 134//游戏礼包 const val GAME_DETAIL = 135//游戏详细信息 + const val NOTICE = 136 //公告 const val FOOTER = 101 } + class GameDetailNoticeViewHolder(var binding: GamedetailItemDescNoticeBinding) : RecyclerView.ViewHolder(binding.root) + class GameDetailRecommendImageViewHolder(var binding: GamedetailItemImageBinding) : RecyclerView.ViewHolder(binding.root) class GameDetailCommentsViewHolder(var binding: GamedetailItemCommentsBinding) : RecyclerView.ViewHolder(binding.root) - class GameDetailCustomColumnViewHolder(view: View) : GameDetailPluginViewHolder(view) + class GameDetailCustomColumnViewHolder(var binding: GamedetailItemCustomColumnBinding) : RecyclerView.ViewHolder(binding.root) class GameDetailRelatedVersionViewHolder(var binding: GameGalleryListBinding) : RecyclerView.ViewHolder(binding.root) diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescItemData.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescItemData.kt index d016553a16..fbaf14c954 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescItemData.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/DescItemData.kt @@ -1,13 +1,14 @@ package com.gh.gamecenter.gamedetail.desc import com.gh.gamecenter.entity.* +import com.gh.gamecenter.gamedetail.entity.CustomColumn data class DescItemData( var notice: ArrayList? = null, var recommendedGames: SubjectEntity? = null, var intro: Intro? = null, var header: String? = "", - var customColumn: GameDetailEntity.CustomColumn? = null, + var customColumn: CustomColumn? = null, var relatedVersion: ArrayList? = null, var recommendedImage: LinkEntity? = null, var comments: ArrayList? = null, diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailCustomColumnAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailCustomColumnAdapter.kt index 6392c0967f..8a928082cd 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailCustomColumnAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailCustomColumnAdapter.kt @@ -14,83 +14,42 @@ import com.facebook.drawee.view.SimpleDraweeView import com.gh.base.BaseRecyclerViewHolder import com.gh.common.util.ImageUtils import com.gh.common.util.goneIf -import com.gh.common.util.setTextWithHighlightedTextWrappedInsideWrapper -import com.gh.common.util.tryWithDefaultCatch import com.gh.gamecenter.R import com.gh.gamecenter.entity.TagEntity -import com.gh.gamecenter.entity.TipsEntity import com.lightgame.adapter.BaseRecyclerAdapter import java.util.* -class GameDetailCustomColumnAdapter(private val tags: ArrayList, - private val tips: TipsEntity?, - private val isOpen: Boolean, - private val showTagDes: Boolean, - context: Context) +class GameDetailCustomColumnAdapter(context: Context) : BaseRecyclerAdapter(context) { + private var mTags: ArrayList = arrayListOf() + private var mShowTagDes: Boolean = false + + fun updateData(tags: ArrayList, showTagDes: Boolean) { + this.mTags = tags + this.mShowTagDes = showTagDes + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { -// var position = viewType val view = mLayoutInflater.inflate(R.layout.gamedetail_item_custom_column_item, parent, false) -// val hintLl = view.findViewById(R.id.gamedetail_ll_hint) - -// if (shouldDisplayTips(tips)) { -// position-- -// } -// if (!isOpen || !showTagDes) { -// when (position % LABEL_COLUMN_LIMIT) { -// POSITION_LEFT -> hintLl.gravity = Gravity.CENTER_VERTICAL or Gravity.LEFT -// POSITION_MIDDLE -> hintLl.gravity = Gravity.CENTER -// POSITION_RIGHT -> hintLl.gravity = Gravity.CENTER_VERTICAL or Gravity.RIGHT -// } -// } - return GameDetailCustomViewHolderViewHolder(view) } override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, position: Int) { if (viewHolder is GameDetailCustomViewHolderViewHolder) { + viewHolder.hintContentTv.maxLines = 4 - viewHolder.hintContentTv.maxLines = if (isOpen) 100 else 4 + val (_, name, icon, des, color) = mTags[position] - if (shouldDisplayTips(tips) && position == 0) { - val title = tips?.title + viewHolder.hintDv.goneIf(TextUtils.isEmpty(icon)) + ImageUtils.displayIcon(viewHolder.hintDv, icon) - ImageUtils.displayIcon(viewHolder.hintDv, tips?.icon) - viewHolder.hintDv.goneIf(TextUtils.isEmpty(tips?.icon)) + viewHolder.hintTv.text = name + viewHolder.hintTv.setTypeface(viewHolder.hintTv.typeface, Typeface.NORMAL) + viewHolder.hintTv.setTextColor(Color.parseColor(color)) - viewHolder.hintContentTv.goneIf(TextUtils.isEmpty(tips?.content)) - - viewHolder.hintContentTv.setTextWithHighlightedTextWrappedInsideWrapper(text = tips?.content ?: "") - - if (title == null - || title.value == "" - || (TextUtils.isEmpty(title.value) && TextUtils.isEmpty(title.color))) { - viewHolder.hintLl.visibility = View.GONE - viewHolder.hintTv.visibility = View.GONE - } else { - viewHolder.hintLl.visibility = View.VISIBLE - viewHolder.hintTv.text = title.value - viewHolder.hintTv.setTypeface(viewHolder.hintTv.typeface, Typeface.BOLD) - if (!TextUtils.isEmpty(title.color)) { - tryWithDefaultCatch { - viewHolder.hintTv.setTextColor(Color.parseColor(title.color)) - } - } - } - } else { - val (_, name, icon, des, color) = tags[position - (if (shouldDisplayTips(tips)) 1 else 0)] - - viewHolder.hintDv.goneIf(TextUtils.isEmpty(icon)) - ImageUtils.displayIcon(viewHolder.hintDv, icon) - - viewHolder.hintTv.text = name - viewHolder.hintTv.setTypeface(viewHolder.hintTv.typeface, Typeface.NORMAL) - viewHolder.hintTv.setTextColor(Color.parseColor(color)) - - viewHolder.hintContentTv.goneIf(!isOpen || !showTagDes) - viewHolder.hintContentTv.text = des - } + viewHolder.hintContentTv.goneIf(!mShowTagDes) + viewHolder.hintContentTv.text = des } } @@ -99,26 +58,7 @@ class GameDetailCustomColumnAdapter(private val tags: ArrayList, } override fun getItemCount(): Int { - return if (shouldDisplayTips(tips)) { - tags.size + 1 - } else tags.size - } - - private fun shouldDisplayTips(tipsEntity: TipsEntity?): Boolean { - if (tipsEntity == null) return false - - // 显示内容 - if (!TextUtils.isEmpty(tipsEntity.content)) return true - - // 显示标题 - return if (tipsEntity.title == null) false else !TextUtils.isEmpty(tipsEntity.title?.value) - } - - companion object { - const val POSITION_LEFT = 0 - const val POSITION_MIDDLE = 1 - const val POSITION_RIGHT = 2 - const val LABEL_COLUMN_LIMIT = 3 + return mTags.size } class GameDetailCustomViewHolderViewHolder(itemView: View) : BaseRecyclerViewHolder(itemView) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt index 1abf25ecfa..8d4c01e61d 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt @@ -7,7 +7,7 @@ import com.google.gson.annotations.SerializedName @Keep data class DetailEntity( var type: String = "", - var notice: ArrayList? = null, + var noticeList: ArrayList? = null, var des: String? = null,// 介绍文案 var gallery: ArrayList? = null, @SerializedName("count") @@ -22,6 +22,8 @@ data class DetailEntity( var server: GameDetailServer? = null, @SerializedName("image_recommend") var imageRecommend: LinkEntity? = null, + @SerializedName("custom_column") + var customColumn: CustomColumn? = null, @SerializedName("related_game") var relatedGames: ArrayList? = null, var recommendedGames: SubjectEntity? = null, @@ -39,6 +41,36 @@ data class NoticeEntity( var overtime: String = "" ) +@Keep +data class CustomColumn( + @SerializedName("_id") + var id: String = "", + var name: String = "", + @SerializedName("show_name") + var showName: Boolean? = false, + @SerializedName("name_icon") + var nameIcon: String? = "", + @SerializedName("name_link") + var nameLink: LinkEntity? = null, + var link: LinkEntity? = null, + var order: Long? = 0, + var title: Title? = null, + var des: String? = "", + @SerializedName("show_des_type") + var showDesType: String? = "", + @SerializedName("show_des_row_num") + var showDesRowNum: Int? = 3, + @SerializedName("show_info_tag") + var showInfoTag: Boolean? = false, + @SerializedName("show_info_tag_des") + var showInfoTagDes: Boolean? = false, + @SerializedName("info_tag") + var infoTag: List? = listOf(), + var time: Long? = 0) + +@Keep +data class Title(var icon: String, var value: String, var color: String) + @Keep data class GameInfo( @SerializedName("download_status") diff --git a/app/src/main/res/layout/gamedetail_item_custom_column.xml b/app/src/main/res/layout/gamedetail_item_custom_column.xml index 1fbf6a689f..ed1afd2d74 100644 --- a/app/src/main/res/layout/gamedetail_item_custom_column.xml +++ b/app/src/main/res/layout/gamedetail_item_custom_column.xml @@ -1,78 +1,190 @@ - + - + + + + + + + + android:paddingLeft="20dp" + android:paddingRight="20dp"> - + android:layout_height="wrap_content" + android:background="@drawable/bg_shape_f8_radius_5" + android:orientation="vertical" + android:paddingLeft="12dp" + android:paddingRight="12dp" + android:paddingBottom="16dp"> - + android:layout_height="0dp" + android:layout_marginTop="12dp" + app:layout_constraintDimensionRatio="2:1" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:roundedCornerRadius="5dp" + tools:background="@color/placeholder_bg" + tools:layout_width="match_parent" /> - - - + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/contentHintContainer" + tools:text="公告文章、权重大于0的自定义栏目和介绍文案,这三类版块内容可组合拼接为一个整体部分,即拼接内容可为其中两种(如公告文章+介绍文案),也可为全部三种(包括多个自定义栏目内容),其中公告文章和自定义栏目之间、公告文章和介绍文案之间、自定义栏目和介绍文案之间加上分割线隔开" /> - - - - - - - - - - - - \ No newline at end of file + app:layout_constraintTop_toBottomOf="@id/contentTv" /> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_custom_column_item.xml b/app/src/main/res/layout/gamedetail_item_custom_column_item.xml index eaa23747a9..af24fe384d 100644 --- a/app/src/main/res/layout/gamedetail_item_custom_column_item.xml +++ b/app/src/main/res/layout/gamedetail_item_custom_column_item.xml @@ -1,39 +1,35 @@ - + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingTop="16dp"> - + + - - - - - + android:text="@string/plugin_tip" + android:textColor="@color/btn_plugin" + android:textSize="14sp" /> - \ No newline at end of file + diff --git a/app/src/main/res/layout/gamedetail_item_desc_notice.xml b/app/src/main/res/layout/gamedetail_item_desc_notice.xml new file mode 100644 index 0000000000..ea1fa112e0 --- /dev/null +++ b/app/src/main/res/layout/gamedetail_item_desc_notice.xml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/gamedetail_item_desc_notice_item.xml b/app/src/main/res/layout/gamedetail_item_desc_notice_item.xml new file mode 100644 index 0000000000..fb66d1b4ee --- /dev/null +++ b/app/src/main/res/layout/gamedetail_item_desc_notice_item.xml @@ -0,0 +1,22 @@ + + + + + + +