絵文字ピッカーのヘッダまわりをisWrapBeforeで調整する

This commit is contained in:
tateisu 2023-03-03 01:38:58 +09:00
parent b22ba3b9ab
commit 953cdea115
2 changed files with 38 additions and 7 deletions

View File

@ -66,8 +66,14 @@ private class EmojiPicker(
} }
private sealed interface PickerItem private sealed interface PickerItem
private class PickerItemUnicode(val unicodeEmoji: UnicodeEmoji) : PickerItem
private class PickerItemCustom(val customEmoji: CustomEmoji) : PickerItem private class PickerItemUnicode(val unicodeEmoji: UnicodeEmoji) : PickerItem {
var isWrapBefore = false
}
private class PickerItemCustom(val customEmoji: CustomEmoji) : PickerItem {
var isWrapBefore = false
}
private open class PickerItemCategory( private open class PickerItemCategory(
var name: String, var name: String,
@ -198,6 +204,7 @@ private class EmojiPicker(
} }
private inner class VhCategory( private inner class VhCategory(
parent: ViewGroup,
view: FrameLayout = FrameLayout(activity), view: FrameLayout = FrameLayout(activity),
) : ViewHolderBase(view) { ) : ViewHolderBase(view) {
var lastItem: PickerItemCategory? = null var lastItem: PickerItemCategory? = null
@ -228,9 +235,11 @@ private class EmojiPicker(
} }
init { init {
view.layoutParams = FlexboxLayoutManager.LayoutParams(0, wrapContent).apply { view.layoutParams = FlexboxLayoutManager.LayoutParams(wrapContent, wrapContent)
flexBasisPercent = 100f .apply {
} flexGrow = 1f
isWrapBefore = true
}
view.setPadding(cellMargin, cellMargin, cellMargin, cellMargin) view.setPadding(cellMargin, cellMargin, cellMargin, cellMargin)
view.addView(tv) view.addView(tv)
} }
@ -255,6 +264,12 @@ private class EmojiPicker(
} }
} }
private fun View.updateWrapBefore(isWrapBefore:Boolean){
val lp = layoutParams as FlexboxLayoutManager.LayoutParams
lp.isWrapBefore = isWrapBefore
layoutParams = lp
}
private inner class VhCustomEmoji( private inner class VhCustomEmoji(
val view: FrameLayout = FrameLayout(activity), val view: FrameLayout = FrameLayout(activity),
) : ViewHolderBase(view) { ) : ViewHolderBase(view) {
@ -277,6 +292,7 @@ private class EmojiPicker(
override fun bind(item: PickerItem) { override fun bind(item: PickerItem) {
if (activity.isDestroyed) return if (activity.isDestroyed) return
if (item is PickerItemCustom) { if (item is PickerItemCustom) {
view.updateWrapBefore(item.isWrapBefore)
view.setTag(R.id.btnAbout, item) view.setTag(R.id.btnAbout, item)
niv.setEmoji( niv.setEmoji(
url = if (disableAnimation) { url = if (disableAnimation) {
@ -310,6 +326,7 @@ private class EmojiPicker(
override fun bind(item: PickerItem) { override fun bind(item: PickerItem) {
if (activity.isDestroyed) return if (activity.isDestroyed) return
if (item is PickerItemUnicode) { if (item is PickerItemUnicode) {
view.updateWrapBefore(item.isWrapBefore)
view.setTag(R.id.btnAbout, item) view.setTag(R.id.btnAbout, item)
val emoji = applySkinTone(item.unicodeEmoji) val emoji = applySkinTone(item.unicodeEmoji)
if (emoji.isSvg) { if (emoji.isSvg) {
@ -347,6 +364,7 @@ private class EmojiPicker(
override fun bind(item: PickerItem) { override fun bind(item: PickerItem) {
if (activity.isDestroyed) return if (activity.isDestroyed) return
if (item is PickerItemUnicode) { if (item is PickerItemUnicode) {
view.updateWrapBefore(item.isWrapBefore)
view.setTag(R.id.btnAbout, item) view.setTag(R.id.btnAbout, item)
val unicodeEmoji = applySkinTone(item.unicodeEmoji) val unicodeEmoji = applySkinTone(item.unicodeEmoji)
tv.text = unicodeEmoji.unifiedCode tv.text = unicodeEmoji.unifiedCode
@ -383,7 +401,7 @@ private class EmojiPicker(
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int) = override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int) =
when (viewType) { when (viewType) {
VT_CATEGORY -> VhCategory() VT_CATEGORY -> VhCategory(viewGroup)
VT_CUSTOM_EMOJI -> VhCustomEmoji() VT_CUSTOM_EMOJI -> VhCustomEmoji()
VT_TWEMOJI -> VhTwemoji() VT_TWEMOJI -> VhTwemoji()
VT_COMPAT_EMOJI -> VhAppCompatEmoji() VT_COMPAT_EMOJI -> VhAppCompatEmoji()
@ -616,7 +634,7 @@ private class EmojiPicker(
keywordLower.isNullOrEmpty() && keywordLower.isNullOrEmpty() &&
(selectedCategory == null || selectedCategory == EmojiCategory.Custom) (selectedCategory == null || selectedCategory == EmojiCategory.Custom)
adapter.list = buildList { val list = buildList {
val filteredCategories = pickerCategries.filter { val filteredCategories = pickerCategries.filter {
selectedCategory == null || it.category == selectedCategory selectedCategory == null || it.category == selectedCategory
}.mapNotNull { category -> }.mapNotNull { category ->
@ -645,6 +663,16 @@ private class EmojiPicker(
} }
} }
} }
list.forEachIndexed { i,v->
fun isPreviousHeader()=list.elementAtOrNull(i-1) is PickerItemCategory
when(v) {
is PickerItemUnicode -> v.isWrapBefore = isPreviousHeader()
is PickerItemCustom -> v.isWrapBefore = isPreviousHeader()
else -> Unit
}
}
adapter.list = list
val targetCategory = lastExpandCategory val targetCategory = lastExpandCategory
if (scrollToCategory && targetCategory != null) { if (scrollToCategory && targetCategory != null) {

View File

@ -2,6 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="320dp" android:layout_width="320dp"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.flexbox.FlexboxLayout <com.google.android.flexbox.FlexboxLayout
@ -90,10 +91,12 @@
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvGrid" android:id="@+id/rvGrid"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:clipToPadding="false" android:clipToPadding="false"
android:fadeScrollbars="false" android:fadeScrollbars="false"
android:minHeight="200dp"
android:padding="6dp" android:padding="6dp"
android:scrollbarStyle="outsideOverlay" android:scrollbarStyle="outsideOverlay"
android:scrollbars="vertical" /> android:scrollbars="vertical" />