SearchBarView.kt 5.35 KB
Newer Older
严久程 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
package com.yidianling.course.widget

import android.content.Context
import android.graphics.Color
import android.text.Editable
import android.text.TextUtils
import android.text.TextWatcher
import android.util.AttributeSet
import android.view.Gravity
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.LinearLayout
import android.widget.TextView
import com.ydl.ydl_router.manager.YDLRouterManager
import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.actionutil.BIConstants
import com.yidianling.common.tools.RxImageTool
import com.yidianling.course.R
import kotlinx.android.synthetic.main.common_search_bar.view.*


/**
 * @author <a href="https://www.jianshu.com/u/c1e5310dd724">xujian</a>
 * @描述:
 * @Copyright Copyright (c) 2019
 * @Company 壹点灵
 * @date 2019/01/07
 */
class SearchBarView : LinearLayout {
    private var barType: Int = JUMP_TO_SEARCH_COURSE

    private var searchCallBack: SearchCallBack? = null

    companion object {
        /**
         * Bar功能类型
         * 0.点击跳转搜索课程页面
         * 1.点击输入文本,此时需要设置EditText为可输入状态
         */
        const val JUMP_TO_SEARCH_COURSE = 0
        const val ENABLE_INPUT = 1
    }

    constructor(context: Context) : super(context) {
        initView()
    }

    constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) {
        initView()
    }

    /**
     * 跳转初始化
     */
    private fun initView() {
        orientation = HORIZONTAL
        gravity = Gravity.CENTER
        setBackgroundColor(Color.WHITE)
        setPadding(0, RxImageTool.dp2px(5f), 0, RxImageTool.dp2px(5f))
        View.inflate(context, R.layout.common_search_bar, this)
        setOnClickListener {
            when (barType) {
                JUMP_TO_SEARCH_COURSE -> {//搜索课程页面
                    ActionCountUtils.count(BIConstants.CourseHomeEvent.POSITION_COURSE_HOME_SEACH_CLICK)
                    YDLRouterManager.router(IYDLRouterConstant.ROUTER_COURSE_SEARCH)
                }
            }
        }
    }

    /**
     * 使用该View组件时必须调用
     * type 一种为点击跳转,一种为点击之后输入文本进行搜索用java代码设置View宽度
     * mSearchCallBack 回调
     */
    fun initBarType(type: Int, mSearchCallback: SearchCallBack?) {
        barType = type
        common_search_bar_edit_text.clearFocus()

        when (barType) {
            //跳转时,设置输入框无法获取焦点
            JUMP_TO_SEARCH_COURSE -> {
            }
            //设置输入框能获取焦点且设置回调
            ENABLE_INPUT -> {
                setSearchCallBack(mSearchCallback)
                toggleKeyBoard(true)
                setEditTextVisibility(true)
            }
        }
    }

    fun setTextVisibility() {
        common_search_bar_btn.visibility = View.VISIBLE
    }


    private fun setEditTextVisibility(boolean: Boolean) {
        if (boolean) {
            common_search_bar_text.visibility = View.GONE
            common_search_bar_edit_text.visibility = View.VISIBLE
            common_search_bar_btn.visibility = View.VISIBLE
            common_search_bar_edit_text.setOnEditorActionListener { v, actionId, event ->
                searchCallBack?.clickSearchBtn(common_search_bar_edit_text.text.toString())
                toggleKeyBoard(false)
                true
            }
            common_search_bar_btn.setOnClickListener {
                toggleKeyBoard(false)
                searchCallBack?.cloase()
            }

            iv_delete_icon.setOnClickListener {
                common_search_bar_edit_text.setText("")
            }
            common_search_bar_edit_text.addTextChangedListener(object : TextWatcher {
                override fun afterTextChanged(s: Editable?) {
                    if (!TextUtils.isEmpty(s)) {
                        iv_delete_icon.visibility = View.VISIBLE
                    } else {
                        iv_delete_icon.visibility = View.GONE
                    }
                }

                override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
                }

                override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                }
            })
        }
    }

    fun setText(content: String) {
        common_search_bar_edit_text.setText(content, TextView.BufferType.EDITABLE)
        if (!TextUtils.isEmpty(content)) {
            iv_delete_icon.visibility = View.VISIBLE
        }
    }

    fun toggleKeyBoard(type: Boolean) {
        if (common_search_bar_edit_text.requestFocus()) {
            val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            if (type) {
                imm.showSoftInput(common_search_bar_edit_text, InputMethodManager.SHOW_IMPLICIT)
            } else imm.hideSoftInputFromWindow(common_search_bar_edit_text.windowToken, 0)
        }
    }

    fun setSearchCallBack(mSearchCallback: SearchCallBack?) {
        searchCallBack = mSearchCallback
    }

    interface SearchCallBack {
        fun clickSearchBtn(str: String) //设置监听(跳转逻辑已在组件内部实现,该方法主要用于回调点击键盘搜索按钮事件)

        fun cloase()
    }
}