沉浸式状态栏
This commit is contained in:
parent
2fe723aead
commit
9264a8c8be
|
|
@ -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>>
|
||||
|
||||
}
|
||||
|
|
@ -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>(),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,14 @@
|
|||
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"/>
|
||||
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
Loading…
Reference in New Issue