在 android Kotlin 中创建自定义工具栏

问题描述 投票:0回答:2

我正在尝试创建一个带有图像按钮的自定义工具栏,每个图像按钮都是一个菜单项。

演示图片:

如何将每个图像按钮连接为菜单项?

android kotlin menu customization menuitem
2个回答
1
投票

你可以这样做:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/homeToolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:title="Sangeet"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <ImageButton
        android:id="@+id/fabRefresh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/refresh_option"
        android:backgroundTint="@android:color/transparent"
        android:layout_gravity="center|right"
        />

</androidx.appcompat.widget.Toolbar>

主要有两个属性:

android:backgroundTint="@android:color/transparent"
android:layout_gravity="center|right"

0
投票

自定义工具栏XML代码

<?xml version="1.0" encoding="utf-8"?><RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/rl_toolbar"
android:background="@color/colorPrimary"
android:layout_height="?attr/actionBarSize">
<RelativeLayout
    android:id="@+id/rl_box"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/_4sdp"
    android:layout_centerVertical="true"
    android:padding="10dp">
    <ImageView
        android:id="@+id/img_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_back"
        android:visibility="gone"/>
    <ImageView
        android:id="@+id/img_menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_menu"
        android:visibility="gone"/>
</RelativeLayout>
<TextView
    android:id="@+id/txt_title"
    android:layout_toEndOf="@id/rl_box"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:text="Title"
    android:textAllCaps="true"
    android:textStyle="bold"
    android:textSize="18sp"
    android:textColor="@color/white"/></RelativeLayout>

任何活动中使用的自定义工具栏 - xml 侧

<include layout="@layout/custom_toolbar"/>

基础活动 kotlin 代码

abstract class BaseActivity : AppCompatActivity() {
private var imgBack: ImageView? = null
private  var imgMenu: ImageView? = null
private var txtTitle: TextView? = null
private var rlToolbar: RelativeLayout? = null
open fun findItem(back: Boolean, menu: Boolean) {
    imgBack = findViewById<ImageView>(R.id.img_back)
    if (back) {
        imgBack!!.visibility = VISIBLE
    }
    imgMenu = findViewById<ImageView>(R.id.img_menu)
    if (menu) {
        imgMenu!!.visibility = VISIBLE
    }
    txtTitle = findViewById<TextView>(R.id.txt_title)
    rlToolbar = findViewById<RelativeLayout>(R.id.rl_toolbar)
}
open fun setTitleWithBack(title: String?) {
    findItem(true, false)
    imgBack!!.setOnClickListener { finish() }
    txtTitle!!.text = title
}
open fun setTitleWithMenu(title: String?) {
    findItem(false, true)
    imgMenu!!.setOnClickListener {
        Toast.makeText(this@BaseActivity, "Progress bar working", Toast.LENGTH_SHORT).show()
    }
    txtTitle!!.text = title}}

任何 Activity 中的方法调用

class HomeActivity : BaseActivity() {
lateinit var bindingHome: ActivityHomeBinding
lateinit var context: Context
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    bindingHome = ActivityHomeBinding.inflate(layoutInflater)
    setContentView(bindingHome.root)
    init()
}
private fun init(){
    context = this
    setTitleWithMenu("Home")
}}
© www.soinside.com 2019 - 2024. All rights reserved.