Android 使用Toolbar实现应用栏实例详解

 更新时间:2022年11月27日 15:28:23   作者:ChenYhong  
这篇文章主要为大家介绍了Android 使用Toolbar实现应用栏实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

使用Toolbar实现应用栏

App中应用栏是十分常见的,通常应用栏会显示当前页面的标题,还有一些操作按钮,例如返回、搜索、扫码等。本文介绍如何通过Toolbar实现应用栏。

使用Toolbar来实现应用栏,需要在AndroidManifest中设置NoActionBar的主题,并且Activity需要继承AppCompatActivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:theme="Theme.MaterialComponents.DayNight.NoActionBar">
        ...
    </application>
</manifest>
class ToolbarActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

在布局文件中添加Toolbar控件,如下:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/color_23242a"
            android:elevation="4dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:titleTextColor="@color/white" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

ActiviyonCreate方法中使用setSupportActionBar来设置Toolbar,代码如下:

class ToolbarActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: LayoutToolbarActivityBinding = DataBindingUtil.setContentView(this, R.layout.layout_toolbar_activity)
        setSupportActionBar(binding.toolbar)
    }
}

至此,一个简单的应用栏已经实现了,效果如图:

应用栏功能扩展

返回

返回是应用栏中最常使用的功能,在Toolbar上使用返回功能,需要进行如下操作。

  • AndroidManifest中配置父Activity,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:theme="Theme.MaterialComponents.DayNight.NoActionBar">
        ...
        <activity
            android:name="com.chenyihong.exampledemo.toolbar.ToolbarActivity"
            android:parentActivityName="com.chenyihong.exampledemo.home.HomeActivity"
            android:screenOrientation="portrait">
            <!--适配 Android 4.0及以下的设备-->
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.chenyihong.exampledemo.home.HomeActivity" />
        </activity>
    </application>
</manifest>
  • ActiviyonCreate方法中使用setDisplayHomeAsUpEnabled来显示返回按钮,代码如下:
class ToolbarActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding: LayoutToolbarActivityBinding = DataBindingUtil.setContentView(this, R.layout.layout_toolbar_activity)
        setSupportActionBar(binding.toolbar)
        supportActionBar?.run {
            // 可以自定义图标的样式
            setHomeAsUpIndicator(R.drawable.icon_back)
            setDisplayHomeAsUpEnabled(true)
        }
    }
}

效果如图:

菜单

应用栏可能还会包含一些功能按钮,例如搜索、扫一扫、打开设置页面等,可以通过OptionsMenu快速实现。

  • 在res/menu目录下创建Menu Resource File,如下
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/icon_search"
        android:title="Search"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_scan"
        android:icon="@drawable/icon_scan"
        android:title="Scan"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_setting"
        android:icon="@drawable/icon_setting"
        android:title="Setting"
        app:showAsAction="never" />
</menu>
  • 调整菜单的样式

由于我这边对Toolbar的背景颜色进行了修改,需要调整OptionsMenu的图标颜色和文字颜色来适配,如下:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--android:theme用于指定Toolbar的样式-->
        <!--app:popupTheme用于指定Menu的样式-->
        <androidx.appcompat.widget.Toolbar
            ...
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.DayNight.ActionBar"/>
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
  • Activity中配置菜单
class ToolbarActivity : AppCompatActivity() {
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.example_menu, menu)
        return true
    }
    override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
        // 如果需要在运行时对菜单进行调整(删除或增加),在此处理
        return super.onPrepareOptionsMenu(menu)
    }
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // 在此处理菜单项的点击事件
        when (item.itemId) {
            R.id.action_search -> {
                showToast("click search menu")
            }
            R.id.action_scan -> {
                showToast("click scan menu")
            }
            R.id.action_setting -> {
                showToast("click setting menu")
            }
        }
        return super.onOptionsItemSelected(item)
    }
    private fun showToast(message: String) {
        runOnUiThread { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() }
    }
    ...
}

效果如图:

示例

完整示例代码可以在demo中查看,项目地址如下:

ExampleDemo github

ExampleDemo gitee

以上就是Android 使用Toolbar实现应用栏的详细内容,更多关于Android 使用Toolbar实现应用栏的资料请关注脚本之家其它相关文章!

相关文章

  • Kotlin集合List Set Map使用介绍详解

    Kotlin集合List Set Map使用介绍详解

    集合是可变数量(可能为0)的一组条目,kotlin标准库提供一个整套用于集合管理的工具,各种集合对于解决问题都具有重要意义,并且经常用到。kotlin中的集合与Java基本类似
    2022-09-09
  • Android下拉列表(Spinner)效果(使用C#和Java分别实现)

    Android下拉列表(Spinner)效果(使用C#和Java分别实现)

    这篇文章主要介绍了Android下拉列表(Spinner)效果(使用C#和Java分别实现),本文直接给出效果图和两种语言的实现代码及布局代码,需要的朋友可以参考下
    2015-06-06
  • Android WebView中图片浏览及缩放效果

    Android WebView中图片浏览及缩放效果

    这篇文章主要为大家详细介绍了Android WebView中图片浏览及缩放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android 通过SQLite数据库实现数据存储管理

    Android 通过SQLite数据库实现数据存储管理

    SQLiteOpenHelper 是Android 提供的一个抽象工具类,负责管理数据库的创建、升级工作。本文主要介绍了如何使用SQLite数据库实现对数据进行存储管理,感兴趣的可以了解一下
    2021-11-11
  • Android ListView的item中嵌套ScrollView的解决办法

    Android ListView的item中嵌套ScrollView的解决办法

    有时候,listview 的item要显示的字段比较多,考虑到显示问题,item外面不得不嵌套ScrollView来实现,纠结怎么解决此问题呢?下面小编给大家分享下Android ListView的item中嵌套ScrollView的解决办法,感兴趣的朋友一起看看吧
    2016-10-10
  • android动态壁纸调用的简单实例

    android动态壁纸调用的简单实例

    动态壁纸的实现其实就是在Activity中调用动态壁纸服务,通过绑定服务得到IWallpaperService,调用该接口中的attach函数实现壁纸的调用。
    2013-06-06
  • 快速解决Android适配底部返回键等虚拟键盘的问题

    快速解决Android适配底部返回键等虚拟键盘的问题

    今天小编就为大家分享一篇快速解决Android适配底部返回键等虚拟键盘的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Flutter实现倒计时功能

    Flutter实现倒计时功能

    这篇文章主要为大家详细介绍了Flutter实现倒计时功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Android Flutter中异常处理的方法总结

    Android Flutter中异常处理的方法总结

    这篇文章主要为大家详细介绍了Android Flutter中异常处理的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • 解决Android从相册中获取图片出错图片却无法裁剪问题的方法

    解决Android从相册中获取图片出错图片却无法裁剪问题的方法

    这篇文章主要介绍了解决Android从相册中获取图片出错图片却无法裁剪问题的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01

最新评论