沉浸式状态栏

This commit is contained in:
renhaoting 2025-11-04 16:49:44 +08:00
parent 2fe723aead
commit 9264a8c8be
11 changed files with 83 additions and 85 deletions

View File

@ -5,6 +5,7 @@ import com.remax.visualnovel.entity.response.basenew.ResponseNew
import com.remax.visualnovel.entity.request.ParamActorList
import com.remax.visualnovel.entity.request.ParamActorTag
import com.remax.visualnovel.entity.response.ActorBean
import com.remax.visualnovel.entity.response.ChatSound
import com.remax.visualnovel.widget.custom.ActorTag
import retrofit2.http.Body
import retrofit2.http.GET
@ -19,5 +20,7 @@ interface ActorsService {
suspend fun requestActorList(@Body param: ParamActorList): ResponseNew<List<ActorBean>>
@GET(BuildConfig.API_BASE + "/tts/config/select/list")
suspend fun requestSoundList(): ResponseNew<List<ChatSound>>
}

View File

@ -4,5 +4,5 @@ package com.remax.visualnovel.entity.request
data class ParamActorList(
var index: Int = 0,
var limit: Int = 5,
var tagIds: List<Long> = listOf<Long>(),
var tagIds: MutableList<Int> = mutableListOf<Int>(),
)

View File

@ -54,10 +54,6 @@ class ChatActivity : BaseBindingActivity<ActivityActorChatBinding>() {
override fun initView() {
/*ARouter.getInstance().inject(this)
StatusBarUtils.setStatusBarAndNavBarIsLight(this, false)
StatusBarUtils.setTransparent(this)
StatusBarUtil2.initImmersive(this, lightStatusBar = true) */
StatusBarUtil3.setImmersiveStatusBar(this, true)
binding.toolbar.addRightIcon(R.mipmap.chat_title_setting) {
binding.drawerMenu.openDrawer(GravityCompat.END)

View File

@ -17,12 +17,10 @@ import com.remax.visualnovel.event.model.tab.ContactTab
import com.remax.visualnovel.event.model.tab.MainTab
import com.remax.visualnovel.event.model.tab.OnTabChangedEvent
import com.remax.visualnovel.extension.launchWithRequest
import com.remax.visualnovel.extension.setMargin
import com.remax.visualnovel.extension.setOnClick
import com.remax.visualnovel.extension.toast
import com.remax.visualnovel.manager.login.LoginManager
import com.remax.visualnovel.utils.Routers
import com.remax.visualnovel.utils.StatusBarUtils
import com.hjq.permissions.XXPermissions
import com.hjq.permissions.permission.PermissionLists
import com.pengxr.modular.eventbus.generated.events.EventDefineOfUIEvents
@ -31,6 +29,7 @@ import com.remax.visualnovel.ui.main.actor.ActorListFragment
import com.remax.visualnovel.ui.main.book.BookListFragment
import com.remax.visualnovel.ui.main.history.HistoryFragment
import com.remax.visualnovel.ui.main.managa.MangaListFragment
import com.remax.visualnovel.utils.StatusBarUtil3
import dagger.hilt.android.AndroidEntryPoint
@ -44,10 +43,9 @@ class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
override fun initView() {
ImmersionBar.with(this)
.transparentStatusBar()
.statusBarColor(R.color.transparent)
.statusBarDarkFont(true)
.fitsSystemWindows(true)
.init();
.init()
StatusBarUtil3.setImmersiveStatusBar(this, false)
onBackPressedDispatcher.addCallback(this) {
if (mainViewModel.canBack) {
@ -60,8 +58,6 @@ class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
with(binding) {
with(viewPager2) {
setMargin(topMargin = StatusBarUtils.statusBarHeight)
val fragments = listOf(
BookListFragment.newInstance(),
MangaListFragment.newInstance(),

View File

@ -2,8 +2,6 @@ package com.remax.visualnovel.ui.main.actor
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.StaggeredGridLayoutManager
@ -21,7 +19,6 @@ import com.remax.visualnovel.entity.response.ActorBean
import com.remax.visualnovel.extension.launchAndCollect2
import com.remax.visualnovel.utils.Routers
import com.remax.visualnovel.utils.StatusBarUtil3
import com.remax.visualnovel.widget.custom.ActorTag
import dagger.hilt.android.AndroidEntryPoint
import kotlin.getValue
import kotlin.math.max
@ -52,13 +49,8 @@ class ActorListFragment : BaseBindingFragment<FragmentMainActorBinding>() {
}
private fun setUI() {
with(binding.root) {
setPadding(
paddingLeft,
paddingTop + StatusBarUtil3.getStatusBarHeight(context),
paddingRight,
paddingBottom
)
with (binding.toolbar) {
setPadding(paddingLeft, paddingTop + StatusBarUtil3.getStatusBarHeight(context), paddingRight, paddingBottom)
}
initTagLayout()
@ -105,12 +97,10 @@ class ActorListFragment : BaseBindingFragment<FragmentMainActorBinding>() {
tagFlowLayout.setTagDataList(tags)
*/
tagFlowLayout.setOnTagClickListener { tag ->
Toast.makeText(context, "Clicked: ${tag.name}", Toast.LENGTH_SHORT).show()
}
tagFlowLayout.setOnExpandStateChangeListener { isExpanded ->
Log.d("TagFlowLayout", "Expand state: $isExpanded")
tagFlowLayout.setOnSelectedTagsChangedListener { selectedTagIdList: List<Int> ->
mRequestParam.tagIds.clear()
mRequestParam.tagIds.addAll(selectedTagIdList)
getActorList(true, false)
}
}
}

View File

@ -5,6 +5,7 @@ import androidx.fragment.app.viewModels
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.dylanc.loadingstateview.BgColorType
import com.gyf.immersionbar.ImmersionBar
import com.remax.visualnovel.app.base.BaseBindingFragment
import com.remax.visualnovel.databinding.FragmentMainBookBinding
import com.remax.visualnovel.utils.Routers
@ -29,13 +30,8 @@ class BookListFragment : BaseBindingFragment<FragmentMainBookBinding>() {
}
private fun setUI() {
with(binding.root) {
setPadding(
paddingLeft,
paddingTop + StatusBarUtil3.getStatusBarHeight(context),
paddingRight,
paddingBottom
)
with (binding.toolbar) {
setPadding(paddingLeft, paddingTop + StatusBarUtil3.getStatusBarHeight(context), paddingRight, paddingBottom)
}
}

View File

@ -5,6 +5,7 @@ import androidx.fragment.app.viewModels
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.dylanc.loadingstateview.BgColorType
import com.gyf.immersionbar.ImmersionBar
import com.remax.visualnovel.app.base.BaseBindingFragment
import com.remax.visualnovel.databinding.FragmentMainHistoryBinding
import com.remax.visualnovel.utils.Routers
@ -18,7 +19,7 @@ import kotlin.getValue
@Route(path = Routers.ROUTE_FRAG_HISTORY)
class HistoryFragment : BaseBindingFragment<FragmentMainHistoryBinding>() {
private val contactViewModel by viewModels<HistoryViewModel>()
private val mViewModel by viewModels<HistoryViewModel>()
override fun onCreated(bundle: Bundle?) {
setUI()
@ -29,13 +30,8 @@ class HistoryFragment : BaseBindingFragment<FragmentMainHistoryBinding>() {
}
private fun setUI() {
with(binding.root) {
setPadding(
paddingLeft,
paddingTop + StatusBarUtil3.getStatusBarHeight(context),
paddingRight,
paddingBottom
)
with (binding.toolbar) {
setPadding(paddingLeft, paddingTop + StatusBarUtil3.getStatusBarHeight(context), paddingRight, paddingBottom)
}
}

View File

@ -5,6 +5,7 @@ import androidx.fragment.app.viewModels
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.dylanc.loadingstateview.BgColorType
import com.gyf.immersionbar.ImmersionBar
import com.remax.visualnovel.app.base.BaseBindingFragment
import com.remax.visualnovel.databinding.FragmentMainMangaBinding
import com.remax.visualnovel.utils.Routers
@ -18,7 +19,7 @@ import kotlin.getValue
@Route(path = Routers.ROUTE_FRAG_MANGALIST)
class MangaListFragment : BaseBindingFragment<FragmentMainMangaBinding>() {
private val contactViewModel by viewModels<MangaListViewModel>()
private val mViewModel by viewModels<MangaListViewModel>()
override fun onCreated(bundle: Bundle?) {
setUI()
@ -29,13 +30,12 @@ class MangaListFragment : BaseBindingFragment<FragmentMainMangaBinding>() {
}
private fun setUI() {
with(binding.root) {
setPadding(
paddingLeft,
paddingTop + StatusBarUtil3.getStatusBarHeight(context),
paddingRight,
paddingBottom
)
with (binding.toolbar) {
setPadding(paddingLeft, paddingTop + StatusBarUtil3.getStatusBarHeight(context), paddingRight, paddingBottom)
}
with(binding) {
}
}

View File

@ -13,10 +13,10 @@ import androidx.appcompat.widget.AppCompatImageView
import androidx.core.content.ContextCompat
import com.remax.visualnovel.R
import com.remax.visualnovel.extension.dpToPx
import com.remax.visualnovel.extension.spToPx
import kotlin.math.max
import kotlin.math.min
import androidx.core.content.withStyledAttributes
import com.remax.visualnovel.utils.ResUtil
import kotlin.collections.mutableListOf
class TagFlowLayout2 @JvmOverloads constructor(
@ -26,11 +26,11 @@ class TagFlowLayout2 @JvmOverloads constructor(
) : ViewGroup(context, attrs, defStyleAttr) {
// 属性变量
private var horizontalSpacing = 10f.dpToPx()
private var verticalSpacing = 8f.dpToPx()
private var textSize = 12f.spToPx()
private var textColor = context.resources.getColor(R.color.tag_text_color)
private var textColorSelected = context.resources.getColor(R.color.white)
private var horizontalSpacing = ResUtil.getPixelSize(R.dimen.dp_10).toFloat()
private var verticalSpacing = ResUtil.getPixelSize(R.dimen.dp_8).toFloat()
private var textSize = ResUtil.getPixelSize(R.dimen.dp_12).toFloat()
private var textColor = ResUtil.getColor(R.color.tag_text_color)
private var textColorSelected = ResUtil.getColor(R.color.white)
private var tagBackground: Drawable? = null
private var maxLinesWhileShrink = 1
private var eachLineMaxTagNum = 2
@ -39,19 +39,19 @@ class TagFlowLayout2 @JvmOverloads constructor(
// 状态变量
private var isExpanded = false
private var isExpanded = true // TODO- enable this as true if wanna default state is collapse
private var actualLineCount = 0
private var showExpandButton = false
private var eachLineAvailableWidth = 0
// 数据
private val tagItems = mutableListOf<ActorTag>()
private val mTagDataList = mutableListOf<ActorTag>()
private val tagViews = mutableListOf<TextView>()
private lateinit var expandIcon: ImageView
// 监听器
private var onTagClickListener: ((ActorTag) -> Unit)? = null
private var onExpandStateChangeListener: ((Boolean) -> Unit)? = null
private var onSelectedTagsChanged: ((List<Int>) -> Unit)? = null
init {
initAttributes(attrs)
@ -110,23 +110,25 @@ class TagFlowLayout2 @JvmOverloads constructor(
}
}
addView(expandIcon)
expandIcon.bringToFront()
updateExpandButton()
}
fun setTagDataList(tags: List<ActorTag>) {
tagItems.clear()
mTagDataList.clear()
tagViews.forEach { removeView(it) }
tagViews.clear()
tagItems.addAll(tags)
mTagDataList.addAll(tags)
tags.forEach { tag ->
val textView = createTagView(tag)
tagViews.add(textView)
addView(textView)
}
expandIcon.bringToFront()
requestLayout()
}
@ -135,7 +137,7 @@ class TagFlowLayout2 @JvmOverloads constructor(
text = tag.name
setTextColor(textColor)
textSize = textSize / resources.displayMetrics.scaledDensity
setPadding(10.dpToPx(), 7.dpToPx(), 10.dpToPx(), 7.dpToPx())
setPadding(10.dpToPx(), 5.dpToPx(), 10.dpToPx(), 5.dpToPx())
setBackgroundResource(R.drawable.tag_flow_item_bg)
isSingleLine = true
ellipsize = TextUtils.TruncateAt.END
@ -143,14 +145,17 @@ class TagFlowLayout2 @JvmOverloads constructor(
includeFontPadding = false
setOnClickListener {
onTagClickListener?.invoke(tag)
with(tag) {
isSelected = !isSelected
}
setTextColor(if (tag.isSelected) textColorSelected else textColor)
setBackgroundResource(if (tag.isSelected) R.drawable.tag_flow_item_bg_selected else R.drawable.tag_flow_item_bg)
requestLayout()
onSelectedTagsChanged?.invoke(
mTagDataList
.filter { it.isSelected }
.map { it.id })
}
}
}
@ -290,7 +295,6 @@ class TagFlowLayout2 @JvmOverloads constructor(
isExpanded = !isExpanded
updateExpandButton()
requestLayout()
onExpandStateChangeListener?.invoke(isExpanded)
}
private fun updateExpandButton() {
@ -298,13 +302,10 @@ class TagFlowLayout2 @JvmOverloads constructor(
expandIcon.setImageDrawable(indicator)
}
fun setOnTagClickListener(listener: (ActorTag) -> Unit) {
onTagClickListener = listener
fun setOnSelectedTagsChangedListener(listener: (List<Int>) -> Unit) {
onSelectedTagsChanged = listener
}
fun setOnExpandStateChangeListener(listener: (Boolean) -> Unit) {
onExpandStateChangeListener = listener
}
fun expand() {
if (!isExpanded) {
@ -327,7 +328,7 @@ class TagFlowLayout2 @JvmOverloads constructor(
}
fun getSelectedTagList() : List<ActorTag> {
return tagItems.filter { it.isSelected }
return mTagDataList.filter { it.isSelected }
}

View File

@ -5,15 +5,16 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
android:background="@mipmap/bg_level_1_page"
android:orientation="vertical">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:layout_constraintBottom_toTopOf="@+id/bottomLayout"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"/>
<com.remax.visualnovel.widget.uitoken.view.UITokenConstraintLayout
@ -26,8 +27,8 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/bookItem"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_width="@dimen/dp_32"
android:layout_height="@dimen/dp_32"
android:src="@mipmap/main_tab_book_on"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/mangaItem"
@ -36,8 +37,8 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/mangaItem"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_width="@dimen/dp_32"
android:layout_height="@dimen/dp_32"
android:src="@mipmap/main_tab_manga_off"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/actorItem"
@ -46,8 +47,8 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/actorItem"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_width="@dimen/dp_32"
android:layout_height="@dimen/dp_32"
android:src="@mipmap/main_tab_actor_off"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/historyItem"
@ -56,8 +57,8 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/historyItem"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_width="@dimen/dp_32"
android:layout_height="@dimen/dp_32"
android:src="@mipmap/main_tab_history_off"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View File

@ -1564,4 +1564,23 @@
</declare-styleable>
<!--历史fragment顶部 tab-->
<declare-styleable name="CustomTabLayout">
<attr name="tabBackground" format="reference" />
<attr name="tabCornerRadius" format="dimension" />
<attr name="selectedTabBackground" format="reference" />
<attr name="textColorNormal" format="color" />
<attr name="textColorSelected" format="color" />
<attr name="textSize" format="dimension" />
<attr name="iconSize" format="dimension" />
<attr name="animDuration" format="integer" />
<attr name="tabSpacing" format="dimension" />
</declare-styleable>
<declare-styleable name="TabItem">
<attr name="tabText" format="string" />
<attr name="tabIcon" format="reference" />
</declare-styleable>
</resources>