From 667a922d97998c688be05d003f4981f602924ca2 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Mon, 24 Nov 2025 13:56:48 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=87=AA=E5=AE=9A=E4=B9=89ti?= =?UTF-8?q?tlebar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/winrecords/WinRecordsActivity.kt | 20 +- .../vididin/features/zero/ZeroBuyActivity.kt | 3 + .../main/res/layout/activity_win_record.xml | 346 +++++++++--------- app/src/main/res/values/strings.xml | 1 + .../architecture/widget/CustomTitleBar.kt | 300 ++++----------- .../src/main/res/layout/custom_title_bar.xml | 64 ++++ .../src/main/res/mipmap-xxhdpi/icon_back.webp | Bin 0 -> 692 bytes .../src/main/res/values/colors.xml | 1 + 8 files changed, 345 insertions(+), 390 deletions(-) create mode 100644 core/architecture/src/main/res/layout/custom_title_bar.xml create mode 100644 core/architecture/src/main/res/mipmap-xxhdpi/icon_back.webp diff --git a/app/src/main/java/com/gamedog/vididin/features/winrecords/WinRecordsActivity.kt b/app/src/main/java/com/gamedog/vididin/features/winrecords/WinRecordsActivity.kt index a44a276..0798179 100644 --- a/app/src/main/java/com/gamedog/vididin/features/winrecords/WinRecordsActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/winrecords/WinRecordsActivity.kt @@ -4,7 +4,11 @@ import android.app.Activity import android.content.Intent import android.view.LayoutInflater import androidx.activity.viewModels +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding import com.ama.core.architecture.appBase.AppViewsActivity +import com.gamedog.vididin.R import com.gamedog.vididin.main.interfaces.OnTabStyleListener import dagger.hilt.android.AndroidEntryPoint import kotlin.getValue @@ -20,7 +24,21 @@ class WinRecordsActivity : AppViewsActivity(), override fun inflateViewBinding(inflater: LayoutInflater) = ViewBinding.inflate(inflater) override fun ViewBinding.initViews() { - //TODO("Not yet implemented") + + with(binding) { + titlebar.setBackIconColor(R.color.black) + titlebar.setTitleText(R.string.lottery_record, R.color.black) + } + + } + + override fun ViewBinding.initWindowInsets() { + ViewCompat.setOnApplyWindowInsetsListener(contentRoot) { v, insets -> + val systemBars = + insets.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout()) + v.updatePadding(top = systemBars.top) + insets + } } override fun ViewBinding.initListeners() { diff --git a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyActivity.kt b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyActivity.kt index f144ad1..f9dd1d1 100644 --- a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyActivity.kt @@ -33,6 +33,9 @@ class ZeroBuyActivity : AppViewsActivity(), OnT } } } + + + } } diff --git a/app/src/main/res/layout/activity_win_record.xml b/app/src/main/res/layout/activity_win_record.xml index 8f34562..f408a91 100644 --- a/app/src/main/res/layout/activity_win_record.xml +++ b/app/src/main/res/layout/activity_win_record.xml @@ -2,199 +2,209 @@ + android:orientation="vertical" + android:id="@+id/content_root" > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginHorizontal="15dp" + android:orientation="vertical"> - - - - - + android:orientation="vertical" + android:layout_marginHorizontal="10dp" + android:layout_toRightOf="@+id/iv_left_win" + android:layout_toLeftOf="@+id/ll_right_win" + android:layout_centerVertical="true" + > + + + + - - + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ddf8413..4163aad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -38,6 +38,7 @@ Sorteio 333 - Grupo de 10 Sorteio 333 - Grupo de 100 Meus Prêmios + Histórico de Prêmios \ No newline at end of file diff --git a/core/architecture/src/main/java/com/ama/core/architecture/widget/CustomTitleBar.kt b/core/architecture/src/main/java/com/ama/core/architecture/widget/CustomTitleBar.kt index ca58959..7351a67 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/widget/CustomTitleBar.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/widget/CustomTitleBar.kt @@ -1,255 +1,113 @@ package com.ama.core.architecture.widget +import android.app.Activity import android.content.Context +import android.content.res.ColorStateList import android.util.AttributeSet import android.view.Gravity -import android.widget.ImageView +import android.view.LayoutInflater +import android.widget.FrameLayout import android.widget.LinearLayout -import android.widget.TextView -import androidx.annotation.DrawableRes -import androidx.core.content.ContextCompat -import androidx.core.view.setPadding +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.core.view.isVisible import com.ama.core.architecture.R +import com.ama.core.architecture.databinding.CustomTitleBarBinding +import com.ama.core.architecture.util.ResUtil +import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.common.util.dp -import com.ama.core.common.util.sp + class CustomTitleBar @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : LinearLayout(context, attrs, defStyleAttr) { +) : FrameLayout(context, attrs, defStyleAttr) { - private lateinit var ivLeft: ImageView - private lateinit var tvTitle: TextView - private lateinit var llRight: LinearLayout + private var mBinding: CustomTitleBarBinding - // 点击回调 - private var onLeftClick: (() -> Unit)? = null - private var onRightButtonClick: ((index: Int) -> Unit)? = null - - // 右侧按钮列表 - private val rightButtons = mutableListOf() init { - initView() - initAttributes(attrs, defStyleAttr) - } + mBinding = CustomTitleBarBinding.inflate(LayoutInflater.from(context), this, true) - private fun initView() { - // 设置水平方向布局 - orientation = HORIZONTAL - gravity = Gravity.CENTER_VERTICAL + mBinding.run { + setOnClickBatch(ivBack, tvCenterTitle) { + when(this) { + ivBack -> { + (context as? Activity)?.let { activity -> + activity.finish() + } + } - // 设置默认内边距 - setPadding(16.dp) + tvCenterTitle -> { - // 创建左侧ImageView - ivLeft = ImageView(context).apply { - layoutParams = LayoutParams( - 24.dp, - 24.dp - ).apply { - gravity = Gravity.CENTER_VERTICAL - } - scaleType = ImageView.ScaleType.CENTER_INSIDE - setOnClickListener { onLeftClick?.invoke() } - } - - // 创建中间标题TextView - tvTitle = TextView(context).apply { - layoutParams = LayoutParams( - LayoutParams.WRAP_CONTENT, - LayoutParams.WRAP_CONTENT - ).apply { - weight = 1f // 占据剩余空间 - gravity = Gravity.CENTER - } - gravity = Gravity.CENTER - setTextColor(ContextCompat.getColor(context, android.R.color.white)) - textSize = 18f - } - - // 创建右侧LinearLayout - llRight = LinearLayout(context).apply { - layoutParams = LayoutParams( - LayoutParams.WRAP_CONTENT, - LayoutParams.WRAP_CONTENT - ).apply { - gravity = Gravity.CENTER_VERTICAL or Gravity.END - } - orientation = HORIZONTAL - gravity = Gravity.CENTER_VERTICAL - } - - // 添加子视图 - addView(ivLeft) - addView(tvTitle) - addView(llRight) - } - - private fun initAttributes(attrs: AttributeSet?, defStyleAttr: Int) { - val typedArray = context.obtainStyledAttributes( - attrs, - R.styleable.CustomTitleBar, - defStyleAttr, - 0 - ) - - try { - // 设置标题文本 - tvTitle.text = typedArray.getString(R.styleable.CustomTitleBar_titleText) ?: "" - - // 设置标题颜色 - val titleColor = typedArray.getColor( - R.styleable.CustomTitleBar_titleTextColor, - ContextCompat.getColor(context, android.R.color.white) - ) - tvTitle.setTextColor(titleColor) - - // 设置标题大小 - val titleSize = typedArray.getDimension( - R.styleable.CustomTitleBar_titleTextSize, - 18f.sp.toFloat() - ) - tvTitle.textSize = titleSize.sp.toFloat() - - // 设置左侧图标 - val leftIconRes = typedArray.getResourceId(R.styleable.CustomTitleBar_leftIcon, 0) - if (leftIconRes != 0) { - setLeftIcon(leftIconRes) - } - - // 设置左侧图标可见性 - val leftIconVisible = typedArray.getBoolean( - R.styleable.CustomTitleBar_leftIconVisible, - true - ) - ivLeft.visibility = if (leftIconVisible) VISIBLE else GONE - - // 设置背景颜色 - val background = typedArray.getColor( - R.styleable.CustomTitleBar_titleBarBackground, - ContextCompat.getColor(context, R.color.title_bar_default_bg) - ) - setBackgroundColor(background) - - // 设置右侧按钮间距 - val buttonSpacing = typedArray.getDimension( - R.styleable.CustomTitleBar_rightButtonSpacing, - 8.dp.toFloat() - ) - llRight.setPadding(0, 0, 0, 0) - - } finally { - typedArray.recycle() - } - } - - /** - * 设置左侧图标 - */ - fun setLeftIcon(@DrawableRes resId: Int) { - ivLeft.setImageResource(resId) - ivLeft.visibility = VISIBLE - } - - /** - * 设置左侧图标可见性 - */ - fun setLeftIconVisible(visible: Boolean) { - ivLeft.visibility = if (visible) VISIBLE else GONE - } - - /** - * 设置标题文本 - */ - fun setTitle(text: String) { - tvTitle.text = text - } - - /** - * 设置标题颜色 - */ - fun setTitleColor(color: Int) { - tvTitle.setTextColor(color) - } - - /** - * 设置标题大小 - */ - fun setTitleSize(sp: Float) { - tvTitle.textSize = sp - } - - /** - * 添加右侧按钮 - */ - fun addRightButton(@DrawableRes resId: Int, spacing: Int = 8.dp): Int { - val imageView = ImageView(context).apply { - layoutParams = LayoutParams( - 24.dp, - 24.dp - ).apply { - if (rightButtons.isNotEmpty()) { - marginStart = spacing + } } } - setImageResource(resId) - scaleType = ImageView.ScaleType.CENTER_INSIDE - setOnClickListener { - onRightButtonClick?.invoke(rightButtons.size - 1) - } - } - rightButtons.add(imageView) - llRight.addView(imageView) - - return rightButtons.size - 1 - } - - /** - * 移除右侧按钮 - */ - fun removeRightButton(index: Int) { - if (index in 0 until rightButtons.size) { - llRight.removeView(rightButtons[index]) - rightButtons.removeAt(index) - // 更新剩余按钮的点击事件索引 - updateRightButtonsClickListeners() } } - /** - * 清空右侧按钮 - */ - fun clearRightButtons() { - llRight.removeAllViews() - rightButtons.clear() + fun setTitleText(textRes: Int, textColor: Int = R.color.white) { + mBinding.tvCenterTitle.text = ResUtil.getString(textRes) + mBinding.tvCenterTitle.setTextColor(ResUtil.getColor(textColor)) } - /** - * 设置左侧点击回调 - */ - fun setOnLeftClickListener(listener: () -> Unit) { - onLeftClick = listener + fun hideBack() { + mBinding.ivBack.isVisible = false } - /** - * 设置右侧按钮点击回调 - */ - fun setOnRightButtonClickListener(listener: (index: Int) -> Unit) { - onRightButtonClick = listener + fun setBackIconColor(color: Int) { + mBinding.ivBack.imageTintList = ColorStateList.valueOf(ResUtil.getColor(color)) } - /** - * 更新右侧按钮点击监听器 - */ - private fun updateRightButtonsClickListeners() { - rightButtons.forEachIndexed { index, imageView -> - imageView.setOnClickListener { - onRightButtonClick?.invoke(index) - } - } + + + + fun addLeftIcon(iconRes: Int, onClicked: ()->Unit) { + val newImageView = AppCompatImageView(context) + newImageView.setImageResource(iconRes) + + var layoutParam = LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT) + layoutParam.marginStart = 15.dp + layoutParam.gravity = Gravity.CENTER_VERTICAL + + mBinding.llLeftRoot.addView(newImageView, layoutParam) } -} \ No newline at end of file + fun addLeftText(textRes: Int, onClicked: ()->Unit) { + val newImageView = AppCompatTextView(context) + newImageView.text = ResUtil.getString(textRes) + + var layoutParam = LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT) + layoutParam.marginStart = 15.dp + layoutParam.gravity = Gravity.CENTER_VERTICAL + + mBinding.llLeftRoot.addView(newImageView, layoutParam) + } + + fun addRightIcon(iconRes: Int, onClicked: ()->Unit) { + val newImageView = AppCompatImageView(context) + newImageView.setImageResource(iconRes) + + var layoutParam = LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT) + layoutParam.marginStart = 15.dp + layoutParam.gravity = Gravity.CENTER_VERTICAL + + mBinding.llRightRoot.addView(newImageView, layoutParam) + } + + fun addRightText(textRes: Int, onClicked: ()->Unit) { + val newImageView = AppCompatTextView(context) + newImageView.text = ResUtil.getString(textRes) + + var layoutParam = LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT) + layoutParam.marginStart = 15.dp + layoutParam.gravity = Gravity.CENTER_VERTICAL + + mBinding.llRightRoot.addView(newImageView, layoutParam) + } + + +} + diff --git a/core/architecture/src/main/res/layout/custom_title_bar.xml b/core/architecture/src/main/res/layout/custom_title_bar.xml new file mode 100644 index 0000000..f4fb44f --- /dev/null +++ b/core/architecture/src/main/res/layout/custom_title_bar.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/architecture/src/main/res/mipmap-xxhdpi/icon_back.webp b/core/architecture/src/main/res/mipmap-xxhdpi/icon_back.webp new file mode 100644 index 0000000000000000000000000000000000000000..44dac7b97585ec8fbd0495e7517da1ba12437705 GIT binary patch literal 692 zcmWIYbaPw7#J~{l>J$(bU=hK^z`$St#MWTs>FgYEf)U7NU_1dLS%6Zxc_l?b?oJ93 zkx>fl4;UDM5DXHNiwhtutRzs?w`&l!mvynKz%R&|l3JV$RPq6cRf>R?1KlJ7WQ(Lj z*cu>q5`=97VwaZ`lmOKPfY?PLLC!#S3XrXlj>JwvVkZ|AfzZ zZ((5Ab{-*y2$O=uqC~K9EI^VeEscTU({cs|-be-p;R_55T+v`TAc4be3P33tpu6&c zFr6WXA(cUa!IL46A(=rB$T9*(sv(0JFou2h0Tt?7AK(*6H~9bA{(qM8%>|dw&p+c~ zx=4d@&%p#6neKxN1riJ%T)SpA_g31jfTj+q5{2o4Tt}?}nmue*H*D8bIzKmG>|#A@ z-ffNBeUhKqfd(Rg!5tsz&NJ_S`#o?wzN${hZWWv3j@7re-=BVUan{Wmdz+BEYM%O` z-C$%L`vqK>8@zK^E P3m|99t#eZG@|_F-wECWi literal 0 HcmV?d00001 diff --git a/core/architecture/src/main/res/values/colors.xml b/core/architecture/src/main/res/values/colors.xml index f3fe41b..33853e0 100644 --- a/core/architecture/src/main/res/values/colors.xml +++ b/core/architecture/src/main/res/values/colors.xml @@ -50,6 +50,7 @@ 00000000 #FF6B9E + #FFFFFF \ No newline at end of file