Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package one.mixin.android.ui.home.web3.market

import android.annotation.SuppressLint
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.view.ViewGroup.MarginLayoutParams
import androidx.core.view.doOnLayout
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.RecyclerView
import one.mixin.android.Constants
Expand All @@ -25,9 +27,12 @@ class MarketHolder(val binding: ItemMarketBinding) : RecyclerView.ViewHolder(bin
private val verticalPadding by lazy { 12.dp }

init {
binding.container.setPadding(horizontalPadding - 4.dp, verticalPadding, horizontalPadding, verticalPadding)
binding.price.updateLayoutParams<MarginLayoutParams> {
marginEnd = horizontalPadding
applyAdaptiveLayout(binding.root.context.screenWidth())
binding.root.doOnLayout { applyAdaptiveLayout(it.width) }
binding.root.addOnLayoutChangeListener { _, left, _, right, _, oldLeft, _, oldRight, _ ->
if (right - left != oldRight - oldLeft) {
applyAdaptiveLayout(right - left)
}
}
}

Expand Down Expand Up @@ -65,4 +70,75 @@ class MarketHolder(val binding: ItemMarketBinding) : RecyclerView.ViewHolder(bin
sparkline.loadSvgWithTint(if (dayType) item.sparklineIn7d else item.sparklineIn24, isRising, isColorReversed)
}
}

private fun applyAdaptiveLayout(width: Int) {
val isCompact = width in 1 until 380.dp
val isExtraCompact = width in 1 until 330.dp
val isTiny = width in 1 until 300.dp
val rowHorizontalPadding = if (isCompact) 12.dp else horizontalPadding
val favoriteSize = if (isTiny) 20.dp else 24.dp
val favoritePadding = if (isTiny) 2.dp else 4.dp
val iconSize = when {
isTiny -> 26.dp
isExtraCompact -> 30.dp
isCompact -> 34.dp
else -> 38.dp
}
val contentSpacing = when {
isTiny -> 4.dp
isExtraCompact -> 6.dp
isCompact -> 8.dp
else -> 10.dp
}
val nameWidth = when {
isTiny -> 66.dp
isExtraCompact -> 72.dp
isCompact -> 84.dp
else -> WRAP_CONTENT
}
val assetValueMaxWidth = when {
isTiny -> 48.dp
isExtraCompact -> 64.dp
isCompact -> 76.dp
else -> 280.dp
}
val chartWidth = when {
isTiny -> 42.dp
isExtraCompact -> 46.dp
isCompact -> 52.dp
else -> 60.dp
}

binding.container.setPadding(
(rowHorizontalPadding - 4.dp).coerceAtLeast(8.dp),
verticalPadding,
rowHorizontalPadding,
verticalPadding
)
binding.favorite.updateLayoutParams<MarginLayoutParams> {
this.width = favoriteSize
this.height = favoriteSize
}
binding.favorite.setPadding(favoritePadding, favoritePadding, favoritePadding, favoritePadding)
binding.icon.updateLayoutParams<MarginLayoutParams> {
this.width = iconSize
this.height = iconSize
marginStart = contentSpacing
}
binding.nameLayout.updateLayoutParams<MarginLayoutParams> {
this.width = nameWidth
marginStart = contentSpacing
}
binding.assetSymbol.maxWidth = nameWidth.takeIf { it != WRAP_CONTENT } ?: Int.MAX_VALUE
binding.assetValue.maxWidth = assetValueMaxWidth
binding.price.updateLayoutParams<MarginLayoutParams> {
marginEnd = if (isCompact) 6.dp else horizontalPadding
}
binding.marketRl.updateLayoutParams {
this.width = chartWidth
}
binding.sparkline.updateLayoutParams {
this.width = chartWidth
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package one.mixin.android.ui.home.web3.trade

import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
Expand All @@ -17,6 +18,7 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Icon
Expand Down Expand Up @@ -410,7 +412,8 @@ fun TradePage(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp)
.padding(top = 4.dp, end = 4.dp),
.padding(top = 4.dp, end = 4.dp)
.horizontalScroll(rememberScrollState()),
horizontalArrangement = Arrangement.Start,
) {
tabs.forEachIndexed { index, tab ->
Expand Down
218 changes: 119 additions & 99 deletions app/src/main/res/layout/fragment_market.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,15 @@
<TextView
android:id="@+id/bot_title"
tools:ignore="RelativeOverlap"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/search_ib"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/Markets"
android:textColor="?attr/text_primary"
android:textSize="18sp"
Expand Down Expand Up @@ -133,112 +137,128 @@
android:background="?attr/bg_white"
app:layout_scrollFlags="enterAlways">

<RadioGroup
android:id="@+id/radio_group_market"
android:layout_width="wrap_content"
<HorizontalScrollView
android:id="@+id/filter_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginStart="16dp"
android:background="@drawable/bg_market_radio"
android:orientation="horizontal"
android:padding="1dp">

<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/radio_favorites"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_half_circle_left"
android:button="@null"
android:checked="true"
android:drawableStart="@drawable/selector_market_favorites"
android:paddingStart="14dp"
android:paddingTop="4dp"
android:paddingEnd="6dp"
android:paddingBottom="4dp" />

<View
android:layout_width="1dp"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:background="@color/color_gray" />

<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/radio_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_half_circle_right"
android:button="@null"
android:drawableStart="@drawable/selector_market_rank"
android:paddingStart="6dp"
android:paddingTop="4dp"
android:paddingEnd="14dp"
android:paddingBottom="4dp" />

</RadioGroup>

<LinearLayout
android:id="@+id/drop_top_sort"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_alignTop="@id/radio_group_market"
android:layout_marginEnd="10dp"
android:layout_toStartOf="@id/drop_percentage_sort"
android:background="@drawable/bg_market_radio"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="14dp"
android:paddingEnd="14dp">

<TextView
android:id="@+id/drop_top_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:textColor="?attr/text_primary"
android:textSize="14sp" />
android:clipToPadding="false"
android:fillViewport="true"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:scrollbars="none">

<ImageView
android:id="@+id/sort_top_arrow"
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_sort_arrow_down" />

</LinearLayout>

<LinearLayout
android:id="@+id/drop_percentage_sort"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_alignTop="@id/radio_group_market"
android:layout_alignParentEnd="true"
android:layout_marginEnd="16dp"
android:background="@drawable/bg_market_radio"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="14dp"
android:paddingEnd="14dp">

<TextView
android:id="@+id/drop_percentage_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:textColor="?attr/text_primary"
android:textSize="14sp" />

<ImageView
android:id="@+id/sort_percentage_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_sort_arrow_down" />

</LinearLayout>
android:orientation="horizontal">

<RadioGroup
android:id="@+id/radio_group_market"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_market_radio"
android:orientation="horizontal"
android:padding="1dp">

<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/radio_favorites"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_half_circle_left"
android:button="@null"
android:checked="true"
android:drawableStart="@drawable/selector_market_favorites"
android:paddingStart="14dp"
android:paddingTop="4dp"
android:paddingEnd="6dp"
android:paddingBottom="4dp" />

<View
android:layout_width="1dp"
android:layout_height="16dp"
android:layout_gravity="center_vertical"
android:background="@color/color_gray" />

<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/radio_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_half_circle_right"
android:button="@null"
android:drawableStart="@drawable/selector_market_rank"
android:paddingStart="6dp"
android:paddingTop="4dp"
android:paddingEnd="14dp"
android:paddingBottom="4dp" />

</RadioGroup>

<Space
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />

<LinearLayout
android:id="@+id/drop_top_sort"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_market_radio"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="14dp"
android:paddingEnd="14dp">

<TextView
android:id="@+id/drop_top_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:textColor="?attr/text_primary"
android:textSize="14sp" />

<ImageView
android:id="@+id/sort_top_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_sort_arrow_down" />

</LinearLayout>

<LinearLayout
android:id="@+id/drop_percentage_sort"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginStart="10dp"
android:background="@drawable/bg_market_radio"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="14dp"
android:paddingEnd="14dp">

<TextView
android:id="@+id/drop_percentage_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:textColor="?attr/text_primary"
android:textSize="14sp" />

<ImageView
android:id="@+id/sort_percentage_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_sort_arrow_down" />

</LinearLayout>
</LinearLayout>
</HorizontalScrollView>

<one.mixin.android.ui.home.web3.widget.MarketTitleView
android:id="@+id/title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/radio_group_market"
android:layout_below="@id/filter_scroll"
android:layout_marginTop="16dp" />

</RelativeLayout>
Expand Down Expand Up @@ -292,4 +312,4 @@

</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</LinearLayout>
</LinearLayout>
Loading