Forráskód Böngészése

feat: 调整底部按钮布局

DoggyZhang 2 hónapja
szülő
commit
189fd6afb3

+ 3 - 3
app/src/main/java/com/adealink/weparty/commonui/widget/AutoMarqueeTextView.kt

@@ -14,9 +14,9 @@ import com.adealink.frame.util.removeUiCallbacks
 import com.adealink.frame.util.runOnUiThread
 import com.adealink.weparty.R
 
-class AutoMarqueeTextView @JvmOverloads constructor(
-    context: Context, attrs: AttributeSet? = null,
-) : AppCompatTextView(context, attrs) {
+open class AutoMarqueeTextView @JvmOverloads constructor(
+    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
+) : AppCompatTextView(context, attrs, defStyleAttr) {
 
     private val isLeft: Boolean = !DisplayUtil.isRtlLayout()
     private var focused = true

+ 16 - 0
app/src/main/java/com/adealink/weparty/commonui/widget/util/ResourceUtil.kt

@@ -1,9 +1,12 @@
 package com.adealink.weparty.commonui.widget.util
 
+import android.annotation.SuppressLint
 import android.content.Context
+import android.graphics.drawable.Drawable
 import android.os.Build
 import android.view.View
 import androidx.annotation.ColorRes
+import androidx.annotation.DrawableRes
 
 fun Context.getColorX(@ColorRes id: Int): Int {
     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -15,4 +18,17 @@ fun Context.getColorX(@ColorRes id: Int): Int {
 
 fun View.getColorX(@ColorRes id: Int): Int {
     return context.getColorX(id)
+}
+
+@SuppressLint("UseCompatLoadingForDrawables")
+fun Context.getDrawableX(@DrawableRes id: Int): Drawable? {
+    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+        getDrawable(id)
+    } else {
+        resources.getDrawable(id)
+    }
+}
+
+fun View.getDrawableX(@DrawableRes id: Int): Drawable? {
+    return context.getDrawableX(id)
 }

+ 125 - 0
app/src/main/java/com/adealink/weparty/module/playmate/widget/PriceMarqueeView.kt

@@ -0,0 +1,125 @@
+package com.adealink.weparty.module.playmate.widget
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.os.Build
+import android.text.SpannableStringBuilder
+import android.text.TextUtils
+import android.text.style.AbsoluteSizeSpan
+import android.text.style.ForegroundColorSpan
+import android.text.style.TypefaceSpan
+import android.util.AttributeSet
+import android.util.TypedValue
+import androidx.core.content.withStyledAttributes
+import com.adealink.frame.ext.findAndSetSpan
+import com.adealink.weparty.R
+import com.adealink.weparty.commonui.DEFAULT_FONT_BOLD
+import com.adealink.weparty.commonui.DEFAULT_FONT_REGULAR
+import com.adealink.weparty.commonui.widget.AutoMarqueeTextView
+import com.adealink.weparty.commonui.widget.CenterImageSpan
+import com.adealink.weparty.commonui.widget.util.getColorX
+import com.adealink.weparty.commonui.widget.util.getDrawableX
+import com.adealink.weparty.util.formatNumberStr
+
+@SuppressLint("SetTextI18n")
+class PriceMarqueeView @JvmOverloads constructor(
+    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
+) : AutoMarqueeTextView(context, attrs, defStyleAttr) {
+
+    companion object {
+        const val ICON_SPAN = "[icon]"
+    }
+
+
+    private var iconSize = 12
+    private var priceTextSize = 12
+    private var priceTextBold = true
+    private var unitTextSize = 12
+
+    init {
+        initAttr(context, attrs)
+        isSingleLine = true
+        ellipsize = TextUtils.TruncateAt.MARQUEE
+        marqueeRepeatLimit = -1
+        includeFontPadding = false
+        setTextColor(getColorX(R.color.color_FF8E8E8E))
+        setTextSize(TypedValue.COMPLEX_UNIT_PX, unitTextSize.toFloat())
+
+        if (isInEditMode) {
+            setPrice(5000f, "hour")
+        }
+    }
+
+    private fun initAttr(context: Context, attrs: AttributeSet? = null) {
+        context.withStyledAttributes(
+            attrs,
+            R.styleable.PriceView
+        ) {
+            iconSize = getDimensionPixelSize(
+                R.styleable.PriceView_price_icon_size,
+                12
+            )
+            priceTextSize = getDimensionPixelSize(
+                R.styleable.PriceView_price_text_size,
+                12
+            )
+            priceTextBold = getBoolean(
+                R.styleable.PriceView_price_text_bold,
+                priceTextBold
+            )
+            unitTextSize = getDimensionPixelSize(
+                R.styleable.PriceView_unit_text_size,
+                12
+            )
+        }
+    }
+
+    fun setPrice(price: Float, unit: String) {
+        val priceStr = if (isInEditMode) {
+            price.toString()
+        } else {
+            formatNumberStr(price, false)
+        }
+        val unitStr = "/$unit"
+        val text = "$ICON_SPAN$priceStr$unitStr"
+
+        val priceUnitText = SpannableStringBuilder(text).apply {
+            //金币图片
+            getDrawableX(R.drawable.common_wallet_coin_ic)?.let {
+                findAndSetSpan(
+                    CenterImageSpan(it.apply {
+                        setBounds(0, 0, iconSize, iconSize)
+                    }),
+                    ICON_SPAN
+                )
+            }
+            //价格字体
+            findAndSetSpan(
+                AbsoluteSizeSpan(priceTextSize),
+                priceStr
+            )
+            findAndSetSpan(
+                ForegroundColorSpan(getColorX(R.color.color_FF0D0D0D)),
+                priceStr
+            )
+            if (priceTextBold) {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+                    findAndSetSpan(
+                        TypefaceSpan(DEFAULT_FONT_BOLD),
+                        priceStr
+                    )
+                }
+            } else {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+                    findAndSetSpan(
+                        TypefaceSpan(DEFAULT_FONT_REGULAR),
+                        priceStr
+                    )
+                }
+            }
+        }
+        setText(priceUnitText)
+    }
+
+
+}

BIN
app/src/main/res/drawable-xhdpi/common_create_order_button_bg.9.png


BIN
app/src/main/res/drawable-xhdpi/common_create_order_button_bg.png


+ 0 - 0
app/src/main/res/drawable-xhdpi/common_create_order_button_self_bg.png → app/src/main/res/drawable-xhdpi/common_create_order_icon_button_bg.png


BIN
app/src/main/res/drawable-xhdpi/common_create_order_long_button_bg.png


+ 2 - 1
module/order/src/main/java/com/adealink/weparty/order/dialog/CreateOrderDialog.kt

@@ -14,6 +14,7 @@ import com.adealink.frame.util.onClick
 import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.toast.util.showFailedToast
+import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.commonui.widget.BottomDialogFragment
 import com.adealink.weparty.commonui.widget.NumberIncreaseView
 import com.adealink.weparty.constant.ORDER_REMARK_MAX_LENGTH
@@ -188,7 +189,7 @@ class CreateOrderDialog : BottomDialogFragment(R.layout.dialog_create_order) {
             dismissLoading()
             when (rlt) {
                 is Rlt.Failed -> {
-
+                    showToast(rlt)
                 }
 
                 is Rlt.Success<CreateOrderRes> -> {

+ 5 - 2
module/order/src/main/res/layout/activity_create_order.xml

@@ -18,7 +18,7 @@
         android:layout_width="0dp"
         android:layout_height="0dp"
         android:background="@color/color_FFF1F2F5"
-        app:layout_constraintBottom_toTopOf="@id/v_bottom"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/top_bar">
@@ -27,7 +27,9 @@
             android:id="@+id/cl_content"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:padding="16dp">
+            android:paddingHorizontal="16dp"
+            android:paddingTop="16dp"
+            android:paddingBottom="104dp">
 
             <androidx.constraintlayout.widget.ConstraintLayout
                 android:id="@+id/cl_user_info"
@@ -295,6 +297,7 @@
         layout="@layout/layout_create_order_bottom"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:layout_marginBottom="24dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent" />

+ 17 - 13
module/order/src/main/res/layout/dialog_select_order.xml

@@ -61,18 +61,17 @@
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/cl_price"
-            android:layout_width="wrap_content"
+            android:layout_width="0dp"
             android:layout_height="0dp"
             android:background="@drawable/common_create_order_price_bg"
-            android:maxWidth="240dp"
-            android:minWidth="170dp"
-            android:paddingStart="20dp"
-            android:paddingEnd="60dp"
+            android:paddingStart="6dp"
+            android:paddingEnd="12dp"
             app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/v_right_space"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent">
 
-            <com.adealink.weparty.module.playmate.widget.PriceView
+            <com.adealink.weparty.module.playmate.widget.PriceMarqueeView
                 android:id="@+id/v_price"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -85,30 +84,35 @@
                 app:layout_constraintTop_toTopOf="parent"
                 app:price_icon_size="12dp"
                 app:price_text_size="18sp"
-                app:unit_text_size="12sp"
-                tools:text="2500/hour" />
+                app:unit_text_size="12sp" />
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 
+        <Space
+            android:id="@+id/v_right_space"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="194:47"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
         <androidx.appcompat.widget.AppCompatTextView
             android:id="@+id/btn_order"
             android:layout_width="0dp"
             android:layout_height="0dp"
-            android:layout_marginStart="-24dp"
-            android:background="@drawable/common_create_order_button_bg"
+            android:background="@drawable/common_create_order_long_button_bg"
             android:fontFamily="@font/poppins_semibold"
             android:gravity="center"
             android:includeFontPadding="false"
             android:text="@string/common_create_order"
             android:textColor="@color/white"
             android:textSize="16sp"
-            app:layout_constrainedHeight="true"
             app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="216:47"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@id/cl_price"
             app:layout_constraintTop_toTopOf="parent" />
 
-
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 

+ 23 - 23
module/order/src/main/res/layout/layout_create_order_bottom.xml

@@ -5,63 +5,63 @@
     android:layout_height="wrap_content">
 
     <androidx.constraintlayout.widget.ConstraintLayout
-        android:id="@+id/cl_order"
-        android:layout_width="0dp"
+        android:layout_width="match_parent"
         android:layout_height="@dimen/common_button_height"
         android:layout_marginHorizontal="16dp"
-        android:layout_marginTop="8dp"
-        android:layout_marginBottom="16dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent">
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/cl_price"
-            android:layout_width="wrap_content"
+            android:layout_width="0dp"
             android:layout_height="0dp"
             android:background="@drawable/common_create_order_price_bg"
-            android:maxWidth="240dp"
-            android:minWidth="170dp"
-            android:paddingStart="20dp"
-            android:paddingEnd="40dp"
-            app:layout_constraintBottom_toBottomOf="@id/btn_order"
-            app:layout_constraintEnd_toStartOf="@id/btn_order"
-            app:layout_constraintHorizontal_chainStyle="packed"
+            android:paddingStart="6dp"
+            android:paddingEnd="12dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/v_right_space"
             app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="@id/btn_order">
+            app:layout_constraintTop_toTopOf="parent">
 
-            <com.adealink.weparty.module.playmate.widget.PriceView
+            <com.adealink.weparty.module.playmate.widget.PriceMarqueeView
                 android:id="@+id/v_price"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
+                android:gravity="center"
+                android:textColor="@color/color_FF4E5969"
                 app:layout_constrainedWidth="true"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent"
-                app:price_icon_size="16dp"
+                app:price_icon_size="12dp"
                 app:price_text_size="18sp"
                 app:unit_text_size="12sp" />
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 
+        <Space
+            android:id="@+id/v_right_space"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="194:47"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
         <androidx.appcompat.widget.AppCompatTextView
             android:id="@+id/btn_order"
             android:layout_width="0dp"
-            android:layout_height="48dp"
-            android:layout_marginStart="-24dp"
-            android:background="@drawable/common_create_order_button_bg"
+            android:layout_height="0dp"
+            android:background="@drawable/common_create_order_long_button_bg"
             android:fontFamily="@font/poppins_semibold"
             android:gravity="center"
             android:includeFontPadding="false"
             android:text="@string/common_create_order"
             android:textColor="@color/white"
             android:textSize="16sp"
-            app:layout_constrainedHeight="true"
             app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="206:47"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@id/cl_price"
             app:layout_constraintTop_toTopOf="parent" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>

+ 16 - 8
module/playmate/src/main/res/layout/layout_playmate_detail_other_bottom.xml

@@ -4,7 +4,6 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
 
-
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/cl_order"
         android:layout_width="0dp"
@@ -20,17 +19,16 @@
             android:id="@+id/cl_price"
             android:layout_width="0dp"
             android:layout_height="0dp"
-            android:layout_marginEnd="66dp"
             android:background="@drawable/common_create_order_price_bg"
-            android:paddingStart="20dp"
-            android:paddingEnd="28dp"
+            android:paddingStart="6dp"
+            android:paddingEnd="12dp"
             app:layout_constraintBottom_toBottomOf="@id/btn_order"
-            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/v_right_space"
             app:layout_constraintHorizontal_chainStyle="packed"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="@id/btn_order">
 
-            <com.adealink.weparty.module.playmate.widget.PriceView
+            <com.adealink.weparty.module.playmate.widget.PriceMarqueeView
                 android:id="@+id/v_price"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -46,10 +44,19 @@
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 
+        <Space
+            android:id="@+id/v_right_space"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="70:47"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
         <androidx.appcompat.widget.AppCompatTextView
             android:id="@+id/btn_order"
-            android:layout_width="93dp"
-            android:layout_height="48dp"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
             android:background="@drawable/common_create_order_button_bg"
             android:ellipsize="end"
             android:fontFamily="@font/poppins_semibold"
@@ -60,6 +67,7 @@
             android:textColor="@color/white"
             android:textSize="16sp"
             app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="93:47"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 

+ 17 - 8
module/playmate/src/main/res/layout/layout_playmate_detail_self_bottom.xml

@@ -19,17 +19,16 @@
             android:id="@+id/cl_price"
             android:layout_width="0dp"
             android:layout_height="0dp"
-            android:layout_marginEnd="66dp"
             android:background="@drawable/common_create_order_price_bg"
-            android:paddingStart="20dp"
-            android:paddingEnd="80dp"
+            android:paddingStart="6dp"
+            android:paddingEnd="12dp"
             app:layout_constraintBottom_toBottomOf="@id/btn_edit"
-            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/v_right_space"
             app:layout_constraintHorizontal_chainStyle="packed"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="@id/btn_edit">
 
-            <com.adealink.weparty.module.playmate.widget.PriceView
+            <com.adealink.weparty.module.playmate.widget.PriceMarqueeView
                 android:id="@+id/v_price"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
@@ -45,12 +44,22 @@
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 
+        <Space
+            android:id="@+id/v_right_space"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="109:47"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/btn_edit"
-            android:layout_width="136dp"
-            android:layout_height="48dp"
-            android:background="@drawable/common_create_order_button_self_bg"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:background="@drawable/common_create_order_icon_button_bg"
             app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintDimensionRatio="135:47"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintTop_toTopOf="parent">