diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
index 5a07853..aa4194b 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -65,6 +65,8 @@
     private var addAmount: Int = 0
     @Volatile
     private var amount: Int = 0
+    private var payMode: PayMode? = null
+    private val hotkeyPayMap = hashMapOf<Int, Int>()
     private var payWay: String? = null
     private var counter: LastPayShowTimer? = null
     private var lastPayInfo: CardUserInfoBean? = null
@@ -87,9 +89,15 @@
                 if (isPaying) {
                     presenter.clickToInterrupt()
                 } else {
-                    presenter.clickNoPay()
-                    amountTxt.text = ""
-                    AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+                    if (payMode == PayMode.FIXPAY) {
+                        checkAmtToPay(amount, true)
+                    } else if (payMode == PayMode.HOTKEY) {
+
+                    } else {
+                        presenter.clickNoPay()
+                        amountTxt.text = ""
+                        AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+                    }
                 }
             }
 
@@ -158,65 +166,121 @@
     @SuppressLint("SetTextI18n")
     override fun dispatchKeyEvent(event: KeyEvent): Boolean {
         if (event.action == KeyEvent.ACTION_DOWN) {
-            val keyCode = event.keyCode
-            when (keyCode) {
-                KeyEvent.KEYCODE_BACK -> {
-                    amountTxt.text = "0"
-                    presenter.clickNoPay()
-                }
-                KeyEvent.KEYCODE_0,
-                KeyEvent.KEYCODE_1,
-                KeyEvent.KEYCODE_2,
-                KeyEvent.KEYCODE_3,
-                KeyEvent.KEYCODE_4,
-                KeyEvent.KEYCODE_5,
-                KeyEvent.KEYCODE_6,
-                KeyEvent.KEYCODE_7,
-                KeyEvent.KEYCODE_8,
-                KeyEvent.KEYCODE_9 -> {
-                    presenter.clickNoPay()
-                    addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
-                }
-                KeyEvent.KEYCODE_POUND, KeyEvent.KEYCODE_PERIOD -> {
-                    presenter.clickNoPay()
-                    val str = amountTxt.text.toString()
-                    if (str.length < 8 && str.indexOf('.') < 0) {
-                        amountTxt.text = "$str."
-                        showScreenAmount()
-                    }
-                }
-                KeyEvent.KEYCODE_NUMPAD_ADD -> {
-                    //'+'
-                    addAmount += getCurAmount()
-                    amountTxt.text = ""
-                    showScreenAmount()
-                }
-                KeyEvent.KEYCODE_DPAD_LEFT -> {
-                    //'F1'
-                    isBackRuning = true
-                    jumpActivity(MenuActivity::class.java)
-                }
-//                KeyEvent.KEYCODE_DPAD_UP ->
-                //'F2'
-//                KeyEvent.KEYCODE_DPAD_DOWN ->
-                //'F3'
-                KeyEvent.KEYCODE_DPAD_RIGHT -> {
-                    //'F4'
-                    jumpActivity(TransdtlActivity::class.java)
-                }
-                KeyEvent.KEYCODE_DEL -> {
-                    //cancel
-                    presenter.clickNoPay()
-                    delValueToEdit()
-                }
-                KeyEvent.KEYCODE_ENTER -> {
-                    checkAmtToPay()
-                }
+            when (payMode) {
+                PayMode.FIXPAY -> fixInputPay(event.keyCode)
+                PayMode.HOTKEY -> hotkeyInputPay(event.keyCode)
+                else -> normalInputPay(event.keyCode)
             }
         }
         return super.dispatchKeyEvent(event)
     }
 
+    private fun fixInputPay(keyCode: Int) {
+        when (keyCode) {
+            KeyEvent.KEYCODE_DPAD_LEFT -> {
+                //'F1'
+                isBackRuning = true
+                jumpActivity(MenuActivity::class.java)
+            }
+            KeyEvent.KEYCODE_DPAD_RIGHT -> {
+                //'F4'
+                jumpActivity(TransdtlActivity::class.java)
+            }
+        }
+    }
+
+    private fun hotkeyInputPay(keyCode: Int) {
+        when (keyCode) {
+            KeyEvent.KEYCODE_0,
+            KeyEvent.KEYCODE_1,
+            KeyEvent.KEYCODE_2,
+            KeyEvent.KEYCODE_3,
+            KeyEvent.KEYCODE_4,
+            KeyEvent.KEYCODE_5,
+            KeyEvent.KEYCODE_6,
+            KeyEvent.KEYCODE_7,
+            KeyEvent.KEYCODE_8,
+            KeyEvent.KEYCODE_9 -> {
+                val key = keyCode - KeyEvent.KEYCODE_0
+                if (hotkeyPayMap.containsKey(key)) {
+                    amount = hotkeyPayMap[key]!!
+                    checkAmtToPay(amount, false)
+                }
+            }
+            KeyEvent.KEYCODE_DPAD_LEFT -> {
+                //'F1'
+                isBackRuning = true
+                jumpActivity(MenuActivity::class.java)
+            }
+            KeyEvent.KEYCODE_DPAD_RIGHT -> {
+                //'F4'
+                jumpActivity(TransdtlActivity::class.java)
+            }
+        }
+    }
+
+    private fun normalInputPay(keyCode: Int) {
+        when (keyCode) {
+            KeyEvent.KEYCODE_BACK -> {
+                amountTxt.text = "0"
+                presenter.clickNoPay()
+            }
+            KeyEvent.KEYCODE_0,
+            KeyEvent.KEYCODE_1,
+            KeyEvent.KEYCODE_2,
+            KeyEvent.KEYCODE_3,
+            KeyEvent.KEYCODE_4,
+            KeyEvent.KEYCODE_5,
+            KeyEvent.KEYCODE_6,
+            KeyEvent.KEYCODE_7,
+            KeyEvent.KEYCODE_8,
+            KeyEvent.KEYCODE_9 -> {
+                presenter.clickNoPay()
+                addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
+            }
+            KeyEvent.KEYCODE_POUND, KeyEvent.KEYCODE_PERIOD -> {
+                presenter.clickNoPay()
+                val str = amountTxt.text.toString()
+                if (str.length < 8 && str.indexOf('.') < 0) {
+                    amountTxt.text = "$str."
+                    showScreenAmount()
+                }
+            }
+            KeyEvent.KEYCODE_NUMPAD_ADD -> {
+                //'+'
+                addAmount += getCurAmount()
+                amountTxt.text = ""
+                showScreenAmount()
+            }
+            KeyEvent.KEYCODE_DPAD_LEFT -> {
+                //'F1'
+                isBackRuning = true
+                jumpActivity(MenuActivity::class.java)
+            }
+//                KeyEvent.KEYCODE_DPAD_UP ->
+            //'F2'
+//                KeyEvent.KEYCODE_DPAD_DOWN ->
+            //'F3'
+            KeyEvent.KEYCODE_DPAD_RIGHT -> {
+                //'F4'
+                jumpActivity(TransdtlActivity::class.java)
+            }
+            KeyEvent.KEYCODE_DEL -> {
+                //cancel
+                presenter.clickNoPay()
+                delValueToEdit()
+            }
+            KeyEvent.KEYCODE_ENTER -> {
+                amount = getCurAmount() + addAmount
+                if (amount > 0) {
+                    checkAmtToPay(amount, false)
+                } else {
+                    AuxScreenController.getInstance().refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
+                }
+            }
+        }
+    }
+
     override fun showUserInfo(info: CardUserInfoBean) {
         CommonUtil.acquireWakeLock(this)
         vCitizenName.text = info.username
@@ -297,16 +361,26 @@
         AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime().substring(0, 16))
         AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
 
-        val record = SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_FIXAMT)
-        if (record != null && PublicDef.CONTROL_NO_FIXPAY_FLAG != record.paraval) {
-            try {
-                amount = Integer.parseInt(record.paraval)
-                amountTxt.text = String.format("%.02f", amount / 100.0f)
-                payStatusEnable = true
-                presenter.clickToPay(amount)
-                showDialogPay()
-            } catch (ex: Exception) {
-                ex.printStackTrace()
+        SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_FIXAMT)?.also { mode ->
+            when {
+                mode.paraval == PayMode.HOTKEY.desc -> {
+                    payMode = PayMode.HOTKEY
+                    hotkeyPayMap.clear()
+                    SPApplication.getInstance().getPos().getHotkeyPay()?.forEach {
+                        hotkeyPayMap[it.key] = it.amount
+                    }
+                }
+                mode.paraval == PayMode.NORMAL.desc -> {
+                    payMode = PayMode.NORMAL
+                }
+                else -> {
+                    payMode = PayMode.FIXPAY
+                    try {
+                        checkAmtToPay(Integer.parseInt(mode.paraval), true)
+                    } catch (ex: Exception) {
+                        ex.printStackTrace()
+                    }
+                }
             }
         }
     }
@@ -469,23 +543,24 @@
         }
     }
 
-    private fun checkAmtToPay() {
-        amount = getCurAmount() + addAmount
-        if (amount > 0) {
+    private fun checkAmtToPay(inputAmt: Int, isFixPay: Boolean) {
+        if (isFixPay) {
             AuxScreenController.getInstance()
-                .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", amount)))
-            amountTxt.text = String.format("%.02f", amount / 100.0f)
-            payStatusEnable = true
-            presenter.clickToPay(amount)
-            showDialogPay()
+                .refreshContent(Arrays.asList("定额付款", CommonUtil.showFormatAmount("金额", inputAmt)))
         } else {
-            AuxScreenController.getInstance().refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
+            AuxScreenController.getInstance()
+                .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", inputAmt)))
         }
+        amount = inputAmt
+        amountTxt.text = String.format("%.02f", inputAmt / 100.0f)
+        payStatusEnable = true
+        presenter.clickToPay(inputAmt)
+        showDialogPay(isFixPay)
     }
 
-    private fun showDialogPay() {
+    private fun showDialogPay(isFixPay: Boolean) {
         dialogPurchase!!.codePaying = false
-        dialogPurchase!!.isFixPay = false
+        dialogPurchase!!.isFixPay = isFixPay
         dialogPurchase!!.codePayingNoCancelEnable = false
         dialogPurchase!!.show("请刷卡", CommonUtil.showFormatAmount("金额", amount))
     }
diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
index b5aeb03..f4fdfad 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -123,4 +123,10 @@
             codePayService.pay(code!!, amount)
         }
     }
+}
+
+enum class PayMode(val desc: String) {
+    NORMAL("none"),
+    FIXPAY("fixpay"),
+    HOTKEY("hotkey")
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
index e7399e5..a31c8ef 100644
--- a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
@@ -5,17 +5,23 @@
 import android.os.CountDownTimer
 import android.view.KeyEvent
 import android.view.View
+import android.widget.EditText
 import android.widget.LinearLayout
+import android.widget.RadioButton
 import android.widget.TextView
 import com.supwisdom.R
 import com.supwisdom.activities.BaseActivity
 import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.PayMode
 import com.supwisdom.activities.menu.MenuActivity
 import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.entity.HotKeyPayRecord
 import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.PublicDef
+import com.supwisdom.view.SWToast
 import java.util.*
+import kotlin.collections.ArrayList
 
 /**
  ** create by zzq on 2019/7/26
@@ -23,10 +29,16 @@
  **/
 class ConsumeModeActivity : BaseActivity() {
     private lateinit var vPayamt: TextView
+    private lateinit var vNormalMode: TextView
+    private lateinit var vFixMode: TextView
+    private lateinit var vHotkeyMode: TextView
     private lateinit var llHotList: LinearLayout
+    private lateinit var llFixMode: LinearLayout
+    private lateinit var llHotMode: LinearLayout
     private val pos = SPApplication.getInstance().getPos()
     private var keyActive = true
     private var shoppwdPass = false
+    private var hotkey = false
     private var tmpPwd = ""
 
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -37,13 +49,7 @@
     }
 
     private fun initData() {
-
-    }
-
-    private fun initView() {
-        vPayamt = findViewById<TextView>(R.id.tv_consume_mode_payamt)
-        llHotList = findViewById<LinearLayout>(R.id.ll_hot_list)
-        this.findViewById<TextView>(R.id.tv_hot_add).setOnClickListener {
+        pos.getHotkeyPay()?.forEach {
             val item = View.inflate(this, R.layout.item_hotkey_pay, null)
             item.findViewById<TextView>(R.id.tv_hot_del).setOnClickListener {
                 llHotList.removeView(item)
@@ -52,9 +58,91 @@
             key.text = "${llHotList.childCount + 1}"
             llHotList.addView(item)
         }
+    }
+
+    private fun initView() {
+        vPayamt = findViewById<TextView>(R.id.tv_consume_mode_payamt)
+        llHotList = findViewById<LinearLayout>(R.id.ll_hot_list)
+        this.findViewById<TextView>(R.id.tv_hot_add).setOnClickListener {
+            if (llHotList.childCount >= 9) {
+                return@setOnClickListener
+            }
+            val item = View.inflate(this, R.layout.item_hotkey_pay, null)
+            item.findViewById<TextView>(R.id.tv_hot_del).setOnClickListener {
+                llHotList.removeView(item)
+                for (loop in 0 until llHotList.childCount) {
+                    val item = llHotList.getChildAt(loop)
+                    val key = item.findViewById<TextView>(R.id.tv_hot_key)
+                    key.text = "${(loop + 1)}"
+                }
+            }
+            val key = item.findViewById<TextView>(R.id.tv_hot_key)
+            key.text = "${llHotList.childCount + 1}"
+            llHotList.addView(item)
+        }
         this.findViewById<TextView>(R.id.tv_hot_save).setOnClickListener {
+            if (llHotList.childCount == 0) {
+                SWToast.show(applicationContext, "请先添加热键", PublicDef.TOAST_SHOW_DOUBT)
+                return@setOnClickListener
+            }
+            val list = ArrayList<HotKeyPayRecord>()
+            for (loop in 0 until llHotList.childCount) {
+                val item = llHotList.getChildAt(loop)
+                val key = item.findViewById<TextView>(R.id.tv_hot_key)
+                val keyboard = key.text.toString()
+                val amt = item.findViewById<EditText>(R.id.tv_hot_amount)
+                val hotamt = CommonUtil.getEditView(amt)
+
+                val record = HotKeyPayRecord()
+                record.key = Integer.parseInt(keyboard)
+                record.amount = CommonUtil.YuanToFen(java.lang.Double.parseDouble(hotamt))
+                list.add(record)
+            }
+            pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, PayMode.HOTKEY.desc)
+            if (!pos.saveHotkeyPay(list)) {
+                SWToast.show(applicationContext, "保持热键失败", PublicDef.TOAST_SHOW_CRY)
+                return@setOnClickListener
+            }
             finish()
         }
+        this.findViewById<TextView>(R.id.tv_return).setOnClickListener {
+            hotkey = false
+            llHotMode.visibility = View.GONE
+            llFixMode.visibility = View.VISIBLE
+            refreshToSetAmount()
+        }
+        vNormalMode = this.findViewById<RadioButton>(R.id.rb_normal_mode)
+        vFixMode = this.findViewById<RadioButton>(R.id.rb_fix_mode)
+        vHotkeyMode = this.findViewById<RadioButton>(R.id.rb_hot_mode)
+
+        llFixMode = this.findViewById<LinearLayout>(R.id.ll_fix_mode)
+        llHotMode = this.findViewById<LinearLayout>(R.id.ll_hot_mode)
+    }
+
+    @SuppressLint("SetTextI18n")
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (!keyActive) {
+                return super.dispatchKeyEvent(event)
+            }
+            resetCounter(200)
+            if (shoppwdPass) {
+                setFixAmount(event.keyCode)
+            } else {
+                checkShopPwd(event.keyCode)
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        shoppwdPass = false
+        hotkey = false
+        keyActive = true
+        llFixMode.visibility = View.VISIBLE
+        llHotMode.visibility = View.GONE
+        refreshToCheckPasswd()
     }
 
     private fun checkShopPwd(keyCode: Int) {
@@ -108,6 +196,10 @@
     }
 
     private fun setFixAmount(keyCode: Int) {
+        if (hotkey) {
+            AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请到大屏设置"))
+            return
+        }
         when (keyCode) {
             KeyEvent.KEYCODE_0,
             KeyEvent.KEYCODE_1,
@@ -126,30 +218,14 @@
                 pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, getFixAmount())
                 jumpActivity(MenuActivity::class.java)
             }
-        }
-    }
-
-    @SuppressLint("SetTextI18n")
-    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
-        if (event.action == KeyEvent.ACTION_DOWN) {
-            if (!keyActive) {
-                return super.dispatchKeyEvent(event)
-            }
-            resetCounter(200)
-            if (shoppwdPass) {
-                setFixAmount(event.keyCode)
-            } else {
-                checkShopPwd(event.keyCode)
+            KeyEvent.KEYCODE_DPAD_LEFT -> {
+                //F1
+                hotkey = true
+                llHotMode.visibility = View.VISIBLE
+                llFixMode.visibility = View.GONE
+                AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请到大屏设置"))
             }
         }
-        return super.dispatchKeyEvent(event)
-    }
-
-    override fun onResume() {
-        super.onResume()
-        shoppwdPass = false
-        keyActive = true
-        refreshToCheckPasswd()
     }
 
     private fun refreshToCheckPasswd() {
@@ -159,11 +235,11 @@
     }
 
     private fun refreshToSetAmount() {
-        val record = pos.getControlPara(PublicDef.CONTROL_FIXAMT)
-        if (record != null && PublicDef.CONTROL_NO_FIXPAY_FLAG != record.paraval) {
-            vPayamt.text = String.format("%.02f", Integer.parseInt(record.paraval) / 100.0f)
-        } else {
-            vPayamt.text = PublicDef.CONTROL_NO_FIXPAY_FLAG
+        vPayamt.text = PayMode.NORMAL.desc
+        pos.getControlPara(PublicDef.CONTROL_FIXAMT)?.also {
+            if (PayMode.FIXPAY.desc == it.paraval) {
+                vPayamt.text = String.format("%.02f", Integer.parseInt(it.paraval) / 100.0f)
+            }
         }
         screenShowAmt()
     }
@@ -174,13 +250,12 @@
         } catch (e: Exception) {
             e.printStackTrace()
         }
-
-        return PublicDef.CONTROL_NO_FIXPAY_FLAG
+        return PayMode.NORMAL.desc
     }
 
     private fun addValueToEdit(value: Int) {
         var str = vPayamt.text.toString()
-        if ("0" == str || PublicDef.CONTROL_NO_FIXPAY_FLAG == str) {
+        if ("0" == str || PayMode.NORMAL.desc == str) {
             str = ""
         }
         //如果已经有小数点，则小数点后面不能超过两位
@@ -201,9 +276,9 @@
 
     private fun delValueToEdit() {
         val str = vPayamt.text.toString()
-        if (PublicDef.CONTROL_NO_FIXPAY_FLAG != str) {
+        if (PayMode.NORMAL.desc != str) {
             if (str.length <= 1) {
-                vPayamt.text = PublicDef.CONTROL_NO_FIXPAY_FLAG
+                vPayamt.text = PayMode.NORMAL.desc
             } else {
                 vPayamt.text = str.substring(0, str.length - 1)
             }
@@ -213,7 +288,7 @@
 
     private fun addDotToEdit() {
         val str = vPayamt.text.toString()
-        if (PublicDef.CONTROL_NO_FIXPAY_FLAG == str) {
+        if (PayMode.NORMAL.desc == str) {
             vPayamt.text = "0."
         } else {
             if (str.length < 8 && str.indexOf('.') < 0) {
@@ -224,14 +299,15 @@
     }
 
     private fun screenShowAmt() {
+        AuxScreenController.getInstance().refreshTitle("消费模式设置   F1-热键")
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(
             Arrays.asList<String>(
-                PublicDef.CONTROL_NO_FIXPAY_FLAG + "-普通消费",
+                PayMode.NORMAL.desc + "-普通消费",
                 "值-定额消费(元)",
                 String.format("金额:%s", vPayamt.text.toString())
             )
         )
-
     }
 
     override fun onDestroy() {
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index b7c482f..140f9a8 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -76,10 +76,7 @@
     const val CONTROL_FIXAMT = "fixamt"
     const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"
     const val CONTROL_DEBUG_ENABLE = "debugenable"
-    /**
-     * 非定额消费标识
-     */
-    const val CONTROL_NO_FIXPAY_FLAG = "none"
+
     /**
      * 消费冲正时限
      */
diff --git a/app/src/main/res/drawable/corner_bg_blue.xml b/app/src/main/res/drawable/corner_bg_blue.xml
new file mode 100644
index 0000000..8619a1d
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_blue.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/light_blue2" />
+    <corners android:radius="8dip" />
+    <stroke
+            android:width="1.0dip"
+            android:color="@color/light_blue2" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_consume_mode.xml b/app/src/main/res/layout/activity_consume_mode.xml
index 3ec88c5..653add6 100644
--- a/app/src/main/res/layout/activity_consume_mode.xml
+++ b/app/src/main/res/layout/activity_consume_mode.xml
@@ -8,6 +8,7 @@
                 style="@style/head_title_text_style"
                 android:text="消费模式"/>
         <RadioGroup
+                android:visibility="gone"
                 android:layout_height="wrap_content"
                 android:layout_width="match_parent"
                 android:orientation="vertical">
@@ -35,6 +36,12 @@
             <TextView
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
+                    android:text="普通消费(none)"
+                    android:textColor="@color/light_blue2"
+                    android:textSize="20sp"/>
+            <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
                     android:text="定额消费(单位:元)"
                     android:textColor="@color/light_blue2"
                     android:textSize="20sp"/>
@@ -67,38 +74,48 @@
                 android:padding="10dp"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent">
-            <TextView
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="快捷消费(单位:元)"
-                    android:textColor="@color/light_blue2"
-                    android:textSize="20sp"/>
             <LinearLayout
                     android:orientation="horizontal"
                     android:gravity="center"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content">
                 <TextView
+                        android:id="@+id/tv_return"
+                        android:textSize="25sp"
+                        android:text="返回"
+                        android:background="@drawable/corner_bg_blue"
+                        android:padding="10dp"
+                        android:textColor="@color/white"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"/>
+                <TextView
                         android:id="@+id/tv_hot_save"
                         android:textSize="25sp"
+                        android:layout_marginLeft="50dp"
                         android:text="保存"
-                        android:background="@drawable/corner_bg_gray"
+                        android:background="@drawable/corner_bg_blue"
                         android:padding="10dp"
-                        android:textColor="@color/light_blue2"
+                        android:textColor="@color/white"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>
                 <TextView
                         android:id="@+id/tv_hot_add"
                         android:textSize="25sp"
                         android:text="添加"
-                        android:layout_marginLeft="100dp"
-                        android:background="@drawable/corner_bg_gray"
+                        android:layout_marginLeft="50dp"
+                        android:background="@drawable/corner_bg_blue"
                         android:padding="10dp"
-                        android:textColor="@color/light_blue2"
+                        android:textColor="@color/white"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>
             </LinearLayout>
-
+            <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text="快捷消费(单位:元)"
+                    android:layout_marginTop="10dp"
+                    android:textColor="@color/light_blue2"
+                    android:textSize="20sp"/>
             <LinearLayout
                     android:id="@+id/ll_hot_list"
                     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/item_hotkey_pay.xml b/app/src/main/res/layout/item_hotkey_pay.xml
index 7ba2b51..060a897 100644
--- a/app/src/main/res/layout/item_hotkey_pay.xml
+++ b/app/src/main/res/layout/item_hotkey_pay.xml
@@ -4,6 +4,7 @@
               android:background="@color/white"
               android:layout_width="match_parent"
               android:weightSum="5"
+              android:padding="5dp"
               android:layout_marginTop="10dp"
               android:layout_height="match_parent">
     <TextView
@@ -40,7 +41,7 @@
             android:layout_marginLeft="10dp"
             android:gravity="center"
             android:padding="10dp"
-            android:background="@drawable/corner_bg_gray"
-            android:textColor="@color/light_blue2"
+            android:background="@drawable/corner_bg_blue"
+            android:textColor="@color/white"
             android:textSize="25sp"/>
 </LinearLayout>
\ No newline at end of file
