沉浸式状态栏
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.ParamActorList
|
||||||
import com.remax.visualnovel.entity.request.ParamActorTag
|
import com.remax.visualnovel.entity.request.ParamActorTag
|
||||||
import com.remax.visualnovel.entity.response.ActorBean
|
import com.remax.visualnovel.entity.response.ActorBean
|
||||||
|
import com.remax.visualnovel.entity.response.ChatSound
|
||||||
import com.remax.visualnovel.widget.custom.ActorTag
|
import com.remax.visualnovel.widget.custom.ActorTag
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
|
|
@ -19,5 +20,7 @@ interface ActorsService {
|
||||||
suspend fun requestActorList(@Body param: ParamActorList): ResponseNew<List<ActorBean>>
|
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(
|
data class ParamActorList(
|
||||||
var index: Int = 0,
|
var index: Int = 0,
|
||||||
var limit: Int = 5,
|
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() {
|
override fun initView() {
|
||||||
/*ARouter.getInstance().inject(this)
|
|
||||||
StatusBarUtils.setStatusBarAndNavBarIsLight(this, false)
|
|
||||||
StatusBarUtils.setTransparent(this)
|
|
||||||
StatusBarUtil2.initImmersive(this, lightStatusBar = true) */
|
|
||||||
StatusBarUtil3.setImmersiveStatusBar(this, true)
|
StatusBarUtil3.setImmersiveStatusBar(this, true)
|
||||||
binding.toolbar.addRightIcon(R.mipmap.chat_title_setting) {
|
binding.toolbar.addRightIcon(R.mipmap.chat_title_setting) {
|
||||||
binding.drawerMenu.openDrawer(GravityCompat.END)
|
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.MainTab
|
||||||
import com.remax.visualnovel.event.model.tab.OnTabChangedEvent
|
import com.remax.visualnovel.event.model.tab.OnTabChangedEvent
|
||||||
import com.remax.visualnovel.extension.launchWithRequest
|
import com.remax.visualnovel.extension.launchWithRequest
|
||||||
import com.remax.visualnovel.extension.setMargin
|
|
||||||
import com.remax.visualnovel.extension.setOnClick
|
import com.remax.visualnovel.extension.setOnClick
|
||||||
import com.remax.visualnovel.extension.toast
|
import com.remax.visualnovel.extension.toast
|
||||||
import com.remax.visualnovel.manager.login.LoginManager
|
import com.remax.visualnovel.manager.login.LoginManager
|
||||||
import com.remax.visualnovel.utils.Routers
|
import com.remax.visualnovel.utils.Routers
|
||||||
import com.remax.visualnovel.utils.StatusBarUtils
|
|
||||||
import com.hjq.permissions.XXPermissions
|
import com.hjq.permissions.XXPermissions
|
||||||
import com.hjq.permissions.permission.PermissionLists
|
import com.hjq.permissions.permission.PermissionLists
|
||||||
import com.pengxr.modular.eventbus.generated.events.EventDefineOfUIEvents
|
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.book.BookListFragment
|
||||||
import com.remax.visualnovel.ui.main.history.HistoryFragment
|
import com.remax.visualnovel.ui.main.history.HistoryFragment
|
||||||
import com.remax.visualnovel.ui.main.managa.MangaListFragment
|
import com.remax.visualnovel.ui.main.managa.MangaListFragment
|
||||||
|
import com.remax.visualnovel.utils.StatusBarUtil3
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -44,10 +43,9 @@ class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
|
||||||
override fun initView() {
|
override fun initView() {
|
||||||
ImmersionBar.with(this)
|
ImmersionBar.with(this)
|
||||||
.transparentStatusBar()
|
.transparentStatusBar()
|
||||||
.statusBarColor(R.color.transparent)
|
.init()
|
||||||
.statusBarDarkFont(true)
|
StatusBarUtil3.setImmersiveStatusBar(this, false)
|
||||||
.fitsSystemWindows(true)
|
|
||||||
.init();
|
|
||||||
|
|
||||||
onBackPressedDispatcher.addCallback(this) {
|
onBackPressedDispatcher.addCallback(this) {
|
||||||
if (mainViewModel.canBack) {
|
if (mainViewModel.canBack) {
|
||||||
|
|
@ -60,8 +58,6 @@ class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
|
||||||
|
|
||||||
with(binding) {
|
with(binding) {
|
||||||
with(viewPager2) {
|
with(viewPager2) {
|
||||||
setMargin(topMargin = StatusBarUtils.statusBarHeight)
|
|
||||||
|
|
||||||
val fragments = listOf(
|
val fragments = listOf(
|
||||||
BookListFragment.newInstance(),
|
BookListFragment.newInstance(),
|
||||||
MangaListFragment.newInstance(),
|
MangaListFragment.newInstance(),
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@ package com.remax.visualnovel.ui.main.actor
|
||||||
|
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.recyclerview.widget.DefaultItemAnimator
|
import androidx.recyclerview.widget.DefaultItemAnimator
|
||||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
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.extension.launchAndCollect2
|
||||||
import com.remax.visualnovel.utils.Routers
|
import com.remax.visualnovel.utils.Routers
|
||||||
import com.remax.visualnovel.utils.StatusBarUtil3
|
import com.remax.visualnovel.utils.StatusBarUtil3
|
||||||
import com.remax.visualnovel.widget.custom.ActorTag
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlin.getValue
|
import kotlin.getValue
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
|
@ -52,13 +49,8 @@ class ActorListFragment : BaseBindingFragment<FragmentMainActorBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUI() {
|
private fun setUI() {
|
||||||
with(binding.root) {
|
with (binding.toolbar) {
|
||||||
setPadding(
|
setPadding(paddingLeft, paddingTop + StatusBarUtil3.getStatusBarHeight(context), paddingRight, paddingBottom)
|
||||||
paddingLeft,
|
|
||||||
paddingTop + StatusBarUtil3.getStatusBarHeight(context),
|
|
||||||
paddingRight,
|
|
||||||
paddingBottom
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
initTagLayout()
|
initTagLayout()
|
||||||
|
|
@ -105,12 +97,10 @@ class ActorListFragment : BaseBindingFragment<FragmentMainActorBinding>() {
|
||||||
|
|
||||||
tagFlowLayout.setTagDataList(tags)
|
tagFlowLayout.setTagDataList(tags)
|
||||||
*/
|
*/
|
||||||
tagFlowLayout.setOnTagClickListener { tag ->
|
tagFlowLayout.setOnSelectedTagsChangedListener { selectedTagIdList: List<Int> ->
|
||||||
Toast.makeText(context, "Clicked: ${tag.name}", Toast.LENGTH_SHORT).show()
|
mRequestParam.tagIds.clear()
|
||||||
}
|
mRequestParam.tagIds.addAll(selectedTagIdList)
|
||||||
|
getActorList(true, false)
|
||||||
tagFlowLayout.setOnExpandStateChangeListener { isExpanded ->
|
|
||||||
Log.d("TagFlowLayout", "Expand state: $isExpanded")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import androidx.fragment.app.viewModels
|
||||||
import com.alibaba.android.arouter.facade.annotation.Route
|
import com.alibaba.android.arouter.facade.annotation.Route
|
||||||
import com.alibaba.android.arouter.launcher.ARouter
|
import com.alibaba.android.arouter.launcher.ARouter
|
||||||
import com.dylanc.loadingstateview.BgColorType
|
import com.dylanc.loadingstateview.BgColorType
|
||||||
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
import com.remax.visualnovel.app.base.BaseBindingFragment
|
import com.remax.visualnovel.app.base.BaseBindingFragment
|
||||||
import com.remax.visualnovel.databinding.FragmentMainBookBinding
|
import com.remax.visualnovel.databinding.FragmentMainBookBinding
|
||||||
import com.remax.visualnovel.utils.Routers
|
import com.remax.visualnovel.utils.Routers
|
||||||
|
|
@ -29,13 +30,8 @@ class BookListFragment : BaseBindingFragment<FragmentMainBookBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUI() {
|
private fun setUI() {
|
||||||
with(binding.root) {
|
with (binding.toolbar) {
|
||||||
setPadding(
|
setPadding(paddingLeft, paddingTop + StatusBarUtil3.getStatusBarHeight(context), paddingRight, paddingBottom)
|
||||||
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.facade.annotation.Route
|
||||||
import com.alibaba.android.arouter.launcher.ARouter
|
import com.alibaba.android.arouter.launcher.ARouter
|
||||||
import com.dylanc.loadingstateview.BgColorType
|
import com.dylanc.loadingstateview.BgColorType
|
||||||
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
import com.remax.visualnovel.app.base.BaseBindingFragment
|
import com.remax.visualnovel.app.base.BaseBindingFragment
|
||||||
import com.remax.visualnovel.databinding.FragmentMainHistoryBinding
|
import com.remax.visualnovel.databinding.FragmentMainHistoryBinding
|
||||||
import com.remax.visualnovel.utils.Routers
|
import com.remax.visualnovel.utils.Routers
|
||||||
|
|
@ -18,7 +19,7 @@ import kotlin.getValue
|
||||||
@Route(path = Routers.ROUTE_FRAG_HISTORY)
|
@Route(path = Routers.ROUTE_FRAG_HISTORY)
|
||||||
class HistoryFragment : BaseBindingFragment<FragmentMainHistoryBinding>() {
|
class HistoryFragment : BaseBindingFragment<FragmentMainHistoryBinding>() {
|
||||||
|
|
||||||
private val contactViewModel by viewModels<HistoryViewModel>()
|
private val mViewModel by viewModels<HistoryViewModel>()
|
||||||
|
|
||||||
override fun onCreated(bundle: Bundle?) {
|
override fun onCreated(bundle: Bundle?) {
|
||||||
setUI()
|
setUI()
|
||||||
|
|
@ -29,13 +30,8 @@ class HistoryFragment : BaseBindingFragment<FragmentMainHistoryBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUI() {
|
private fun setUI() {
|
||||||
with(binding.root) {
|
with (binding.toolbar) {
|
||||||
setPadding(
|
setPadding(paddingLeft, paddingTop + StatusBarUtil3.getStatusBarHeight(context), paddingRight, paddingBottom)
|
||||||
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.facade.annotation.Route
|
||||||
import com.alibaba.android.arouter.launcher.ARouter
|
import com.alibaba.android.arouter.launcher.ARouter
|
||||||
import com.dylanc.loadingstateview.BgColorType
|
import com.dylanc.loadingstateview.BgColorType
|
||||||
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
import com.remax.visualnovel.app.base.BaseBindingFragment
|
import com.remax.visualnovel.app.base.BaseBindingFragment
|
||||||
import com.remax.visualnovel.databinding.FragmentMainMangaBinding
|
import com.remax.visualnovel.databinding.FragmentMainMangaBinding
|
||||||
import com.remax.visualnovel.utils.Routers
|
import com.remax.visualnovel.utils.Routers
|
||||||
|
|
@ -18,7 +19,7 @@ import kotlin.getValue
|
||||||
@Route(path = Routers.ROUTE_FRAG_MANGALIST)
|
@Route(path = Routers.ROUTE_FRAG_MANGALIST)
|
||||||
class MangaListFragment : BaseBindingFragment<FragmentMainMangaBinding>() {
|
class MangaListFragment : BaseBindingFragment<FragmentMainMangaBinding>() {
|
||||||
|
|
||||||
private val contactViewModel by viewModels<MangaListViewModel>()
|
private val mViewModel by viewModels<MangaListViewModel>()
|
||||||
|
|
||||||
override fun onCreated(bundle: Bundle?) {
|
override fun onCreated(bundle: Bundle?) {
|
||||||
setUI()
|
setUI()
|
||||||
|
|
@ -29,13 +30,12 @@ class MangaListFragment : BaseBindingFragment<FragmentMainMangaBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUI() {
|
private fun setUI() {
|
||||||
with(binding.root) {
|
with (binding.toolbar) {
|
||||||
setPadding(
|
setPadding(paddingLeft, paddingTop + StatusBarUtil3.getStatusBarHeight(context), paddingRight, paddingBottom)
|
||||||
paddingLeft,
|
}
|
||||||
paddingTop + StatusBarUtil3.getStatusBarHeight(context),
|
|
||||||
paddingRight,
|
with(binding) {
|
||||||
paddingBottom
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,10 @@ import androidx.appcompat.widget.AppCompatImageView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.remax.visualnovel.R
|
import com.remax.visualnovel.R
|
||||||
import com.remax.visualnovel.extension.dpToPx
|
import com.remax.visualnovel.extension.dpToPx
|
||||||
import com.remax.visualnovel.extension.spToPx
|
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
import androidx.core.content.withStyledAttributes
|
import androidx.core.content.withStyledAttributes
|
||||||
|
import com.remax.visualnovel.utils.ResUtil
|
||||||
import kotlin.collections.mutableListOf
|
import kotlin.collections.mutableListOf
|
||||||
|
|
||||||
class TagFlowLayout2 @JvmOverloads constructor(
|
class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
|
|
@ -26,11 +26,11 @@ class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
) : ViewGroup(context, attrs, defStyleAttr) {
|
) : ViewGroup(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
// 属性变量
|
// 属性变量
|
||||||
private var horizontalSpacing = 10f.dpToPx()
|
private var horizontalSpacing = ResUtil.getPixelSize(R.dimen.dp_10).toFloat()
|
||||||
private var verticalSpacing = 8f.dpToPx()
|
private var verticalSpacing = ResUtil.getPixelSize(R.dimen.dp_8).toFloat()
|
||||||
private var textSize = 12f.spToPx()
|
private var textSize = ResUtil.getPixelSize(R.dimen.dp_12).toFloat()
|
||||||
private var textColor = context.resources.getColor(R.color.tag_text_color)
|
private var textColor = ResUtil.getColor(R.color.tag_text_color)
|
||||||
private var textColorSelected = context.resources.getColor(R.color.white)
|
private var textColorSelected = ResUtil.getColor(R.color.white)
|
||||||
private var tagBackground: Drawable? = null
|
private var tagBackground: Drawable? = null
|
||||||
private var maxLinesWhileShrink = 1
|
private var maxLinesWhileShrink = 1
|
||||||
private var eachLineMaxTagNum = 2
|
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 actualLineCount = 0
|
||||||
private var showExpandButton = false
|
private var showExpandButton = false
|
||||||
private var eachLineAvailableWidth = 0
|
private var eachLineAvailableWidth = 0
|
||||||
|
|
||||||
// 数据
|
// 数据
|
||||||
private val tagItems = mutableListOf<ActorTag>()
|
private val mTagDataList = mutableListOf<ActorTag>()
|
||||||
private val tagViews = mutableListOf<TextView>()
|
private val tagViews = mutableListOf<TextView>()
|
||||||
private lateinit var expandIcon: ImageView
|
private lateinit var expandIcon: ImageView
|
||||||
|
|
||||||
// 监听器
|
// 监听器
|
||||||
private var onTagClickListener: ((ActorTag) -> Unit)? = null
|
private var onSelectedTagsChanged: ((List<Int>) -> Unit)? = null
|
||||||
private var onExpandStateChangeListener: ((Boolean) -> Unit)? = null
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
initAttributes(attrs)
|
initAttributes(attrs)
|
||||||
|
|
@ -110,23 +110,25 @@ class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
addView(expandIcon)
|
addView(expandIcon)
|
||||||
|
expandIcon.bringToFront()
|
||||||
|
|
||||||
updateExpandButton()
|
updateExpandButton()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun setTagDataList(tags: List<ActorTag>) {
|
fun setTagDataList(tags: List<ActorTag>) {
|
||||||
tagItems.clear()
|
mTagDataList.clear()
|
||||||
tagViews.forEach { removeView(it) }
|
tagViews.forEach { removeView(it) }
|
||||||
tagViews.clear()
|
tagViews.clear()
|
||||||
|
|
||||||
tagItems.addAll(tags)
|
mTagDataList.addAll(tags)
|
||||||
tags.forEach { tag ->
|
tags.forEach { tag ->
|
||||||
val textView = createTagView(tag)
|
val textView = createTagView(tag)
|
||||||
tagViews.add(textView)
|
tagViews.add(textView)
|
||||||
addView(textView)
|
addView(textView)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expandIcon.bringToFront()
|
||||||
requestLayout()
|
requestLayout()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,7 +137,7 @@ class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
text = tag.name
|
text = tag.name
|
||||||
setTextColor(textColor)
|
setTextColor(textColor)
|
||||||
textSize = textSize / resources.displayMetrics.scaledDensity
|
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)
|
setBackgroundResource(R.drawable.tag_flow_item_bg)
|
||||||
isSingleLine = true
|
isSingleLine = true
|
||||||
ellipsize = TextUtils.TruncateAt.END
|
ellipsize = TextUtils.TruncateAt.END
|
||||||
|
|
@ -143,14 +145,17 @@ class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
includeFontPadding = false
|
includeFontPadding = false
|
||||||
|
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
onTagClickListener?.invoke(tag)
|
|
||||||
with(tag) {
|
with(tag) {
|
||||||
isSelected = !isSelected
|
isSelected = !isSelected
|
||||||
}
|
}
|
||||||
|
|
||||||
setTextColor(if (tag.isSelected) textColorSelected else textColor)
|
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)
|
setBackgroundResource(if (tag.isSelected) R.drawable.tag_flow_item_bg_selected else R.drawable.tag_flow_item_bg)
|
||||||
requestLayout()
|
requestLayout()
|
||||||
|
|
||||||
|
onSelectedTagsChanged?.invoke(
|
||||||
|
mTagDataList
|
||||||
|
.filter { it.isSelected }
|
||||||
|
.map { it.id })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -185,7 +190,7 @@ class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
|
|
||||||
// 检查是否需要换行(考虑水平间距)
|
// 检查是否需要换行(考虑水平间距)
|
||||||
val curLineNeedTotalWidth: Int = if (curLineTotalWidth == 0) childWidth
|
val curLineNeedTotalWidth: Int = if (curLineTotalWidth == 0) childWidth
|
||||||
else curLineTotalWidth + horizontalSpacing.toInt() + childWidth
|
else curLineTotalWidth + horizontalSpacing.toInt() + childWidth
|
||||||
|
|
||||||
if (curLineNeedTotalWidth > eachLineAvailableWidth) { // 换行处理
|
if (curLineNeedTotalWidth > eachLineAvailableWidth) { // 换行处理
|
||||||
lineIndex++
|
lineIndex++
|
||||||
|
|
@ -290,7 +295,6 @@ class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
isExpanded = !isExpanded
|
isExpanded = !isExpanded
|
||||||
updateExpandButton()
|
updateExpandButton()
|
||||||
requestLayout()
|
requestLayout()
|
||||||
onExpandStateChangeListener?.invoke(isExpanded)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateExpandButton() {
|
private fun updateExpandButton() {
|
||||||
|
|
@ -298,13 +302,10 @@ class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
expandIcon.setImageDrawable(indicator)
|
expandIcon.setImageDrawable(indicator)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setOnTagClickListener(listener: (ActorTag) -> Unit) {
|
fun setOnSelectedTagsChangedListener(listener: (List<Int>) -> Unit) {
|
||||||
onTagClickListener = listener
|
onSelectedTagsChanged = listener
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setOnExpandStateChangeListener(listener: (Boolean) -> Unit) {
|
|
||||||
onExpandStateChangeListener = listener
|
|
||||||
}
|
|
||||||
|
|
||||||
fun expand() {
|
fun expand() {
|
||||||
if (!isExpanded) {
|
if (!isExpanded) {
|
||||||
|
|
@ -327,7 +328,7 @@ class TagFlowLayout2 @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSelectedTagList() : List<ActorTag> {
|
fun getSelectedTagList() : List<ActorTag> {
|
||||||
return tagItems.filter { it.isSelected }
|
return mTagDataList.filter { it.isSelected }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,16 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="false"
|
android:fitsSystemWindows="false"
|
||||||
|
android:background="@mipmap/bg_level_1_page"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
|
||||||
<androidx.viewpager2.widget.ViewPager2
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
android:id="@+id/viewPager2"
|
android:id="@+id/viewPager2"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/bottomLayout"
|
app:layout_constraintBottom_toTopOf="@+id/bottomLayout"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent"/>
|
||||||
|
|
||||||
|
|
||||||
<com.remax.visualnovel.widget.uitoken.view.UITokenConstraintLayout
|
<com.remax.visualnovel.widget.uitoken.view.UITokenConstraintLayout
|
||||||
|
|
@ -26,8 +27,8 @@
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/bookItem"
|
android:id="@+id/bookItem"
|
||||||
android:layout_width="32dp"
|
android:layout_width="@dimen/dp_32"
|
||||||
android:layout_height="32dp"
|
android:layout_height="@dimen/dp_32"
|
||||||
android:src="@mipmap/main_tab_book_on"
|
android:src="@mipmap/main_tab_book_on"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/mangaItem"
|
app:layout_constraintEnd_toStartOf="@+id/mangaItem"
|
||||||
|
|
@ -36,8 +37,8 @@
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/mangaItem"
|
android:id="@+id/mangaItem"
|
||||||
android:layout_width="32dp"
|
android:layout_width="@dimen/dp_32"
|
||||||
android:layout_height="32dp"
|
android:layout_height="@dimen/dp_32"
|
||||||
android:src="@mipmap/main_tab_manga_off"
|
android:src="@mipmap/main_tab_manga_off"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/actorItem"
|
app:layout_constraintEnd_toStartOf="@+id/actorItem"
|
||||||
|
|
@ -46,8 +47,8 @@
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/actorItem"
|
android:id="@+id/actorItem"
|
||||||
android:layout_width="32dp"
|
android:layout_width="@dimen/dp_32"
|
||||||
android:layout_height="32dp"
|
android:layout_height="@dimen/dp_32"
|
||||||
android:src="@mipmap/main_tab_actor_off"
|
android:src="@mipmap/main_tab_actor_off"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/historyItem"
|
app:layout_constraintEnd_toStartOf="@+id/historyItem"
|
||||||
|
|
@ -56,8 +57,8 @@
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/historyItem"
|
android:id="@+id/historyItem"
|
||||||
android:layout_width="32dp"
|
android:layout_width="@dimen/dp_32"
|
||||||
android:layout_height="32dp"
|
android:layout_height="@dimen/dp_32"
|
||||||
android:src="@mipmap/main_tab_history_off"
|
android:src="@mipmap/main_tab_history_off"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
|
|
||||||
|
|
@ -1564,4 +1564,23 @@
|
||||||
</declare-styleable>
|
</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>
|
</resources>
|
||||||
Loading…
Reference in New Issue