18034727885
2026-06-26 253f680fb9666751e0f9a8e5e8f2f9e3eb1894e3
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
package com.example.basecore.widget
 
import android.app.Activity
import android.content.Context
import android.graphics.Color
import android.text.TextUtils
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isVisible
import com.example.basecore.R
 
 
class TitleLayout : FrameLayout {
    private lateinit var mInflater: LayoutInflater
    private lateinit var titleTv: TextView
    private lateinit var moreTv: TextView
    private lateinit var backTv: ImageView
    private var mLayout: FrameLayout? = null
    private lateinit var line: View
 
    private lateinit var moreImg: ImageView
 
    constructor(context: Context) : super(context)
 
 
    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
        initView(attrs)
    }
 
 
    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) :
            super(context, attrs, defStyleAttr) {
        initView(attrs)
    }
 
 
    private fun initView(attrs: AttributeSet?) {
        mInflater = LayoutInflater.from(context)
        val view: View = mInflater.inflate(R.layout.title_layout, this)
        backTv = view.findViewById(R.id.topbar_back)
        titleTv = view.findViewById(R.id.topbar_title)
        moreTv = view.findViewById(R.id.topbar_more)
        mLayout = view.findViewById(R.id.top_bar_layout)
        line = view.findViewById(R.id.line)
 
        moreImg = view.findViewById(R.id.more_img)
 
        val typedArray = context.obtainStyledAttributes(attrs, R.styleable.TitleLayout)
        val title = typedArray.getString(R.styleable.TitleLayout_title_text)
        val imgLeft =
            typedArray.getResourceId(R.styleable.TitleLayout_img_left, R.mipmap.ic_back_black)
        val hideBack = typedArray.getBoolean(R.styleable.TitleLayout_hide_back, false)
        typedArray.recycle()
        if (!TextUtils.isEmpty(title)) {
            titleTv.text = title
        }
        backTv.visibility = if (hideBack) View.GONE else View.VISIBLE
        backTv.setImageResource(imgLeft)
        backTv.setOnClickListener {
            (context as Activity).finish()
            mBackClickListener?.onBackClick()
        }
    }
 
    fun getContainerView() = mLayout
 
 
    private var mBackClickListener: OnBackEvent? = null
 
    fun setBackClickListener(backClickListener: OnBackEvent) {
        mBackClickListener = backClickListener
    }
 
    fun setMore(
        more: String,
        onClickListener: OnClickListener
    ) {
        moreTv.visibility = View.VISIBLE
        moreTv.text = more
        moreTv.setOnClickListener(onClickListener)
    }
 
    fun setMoreImg(resource: Int?, onClickListener : OnClickListener) {
        if (resource != null) {
            moreImg.setImageResource(resource)
        }
        moreImg.isVisible = true
        moreImg.setOnClickListener (onClickListener)
    }
 
    fun setLineVisibility(visibility: Int) {
        line.visibility = visibility
    }
 
    fun getMoreTv(): TextView? {
        return moreTv
    }
 
    fun setTitle(title: String?) {
        if (title != null)
            titleTv.text = title
    }
 
    fun setWhiteTitle() {
        titleTv.setTextColor(Color.WHITE)
        backTv.setImageResource(R.mipmap.ic_back_white)
    }
 
 
    interface OnBackEvent {
        fun onBackClick()
    }
}