欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Toolbar(去除默认的actionBar主题,使用Toolbar)

程序员文章站 2022-04-21 10:20:16
前面说了,Android默认每个界面都有ActionBar,而我们项目使用Toolbar,所以要给Activity配置去除ActionBar的主题,前面我们已经配置了,如果大家还没配置要配置了,才能使用Toolbar,不然会因为冲突,而崩溃。如果没有这个依赖,则需要添加 //material design依赖 //AppBarLayout在这里面 implementation 'com.google.android.material:material:1.0.0'/** * 通用...

前面说了,Android默认每个界面都有ActionBar,而我们项目使用Toolbar,所以要给Activity配置去除ActionBar的主题,前面我们已经配置了,如果大家还没配置要配置了,才能使用Toolbar,不然会因为冲突,而崩溃。

如果没有这个依赖,则需要添加

 	//material design依赖
    //AppBarLayout在这里面
    implementation 'com.google.android.material:material:1.0.0'
/**
 * 通用标题界面
 */
public class BaseTitleActivity extends BaseCommonActivity {
    /**
     * 标题控件
     */
    @BindView(R.id.toolbar)
    protected Toolbar toolbar;


    @Override
    protected void initView() {
        super.initView();

        //初始化Toolbar
        setSupportActionBar(toolbar);

        //是否显示返回按钮
        if (isShowBackMenu()) {
            showBackMenu();
        }
    }

    /**
     * 显示返回按钮
     */
    protected void showBackMenu() {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    /**
     * 是否显示返回按钮
     * @return
     */
    protected boolean isShowBackMenu() {
        return true;
    }

    /**
     * 按钮点击回调事件
     *
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                //Toolbar返回按钮点击
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    //    @Override
//    public void setTitle(int titleId) {//这个方法可以不用写,因为已经继承了
//        super.setTitle(titleId);
//    }
}

通用的tool_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- AppBarLayout主要用来实现标题折叠功能
    elevation:阴影高度  0dp:表示去掉阴影
    ?attr/actionBarSize:表示取找这个属性的值,如果找到就用这个actionBarSize值
    -->
<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:theme="@style/AppTheme.AppBarOverlay"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:elevation="0dp">

    <!-- Toolbar控件
        PupupOverlay:翻译:折叠覆盖

        注意:上面
              style="@style/AppTheme.AppBarOverlay" 错误的
              (AppBarLayout正确写法是:theme="@style/AppTheme.AppBarOverlay" 注意是:theme)

              app:popupTheme="@style/AppTheme.PopupOverlay"
              (这个是toolbar的正确写法 app命名的)

       app:titleTextColor:标题字体颜色 app命名

       这里把  app:titleTextColor="@color/white"去掉(这个只能更改单个,不能更改返回箭头的颜色)
       所以把AppBarLayout的style变为android:theme,全称是:      android:theme="@style/AppTheme.AppBarOverlay"
    -->
    <androidx.appcompat.widget.Toolbar
        android:background="?attr/colorPrimary"
        android:id="@+id/toolbar"
        android:layout_height="?attr/actionBarSize"
        android:layout_width="match_parent"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</com.google.android.material.appbar.AppBarLayout>

上面用到的 theme style(在style.xml添加)

     
    <!--  AppBarLayout样式   
        这个AppBarLayout样式显示的是暗一点的颜色,那么里面的文字就会显示亮一点的颜色
     -->    用theme引用
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    
    <!--toolbar样式-->  用app:popupTheme引用
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

最后在其他Activity xml文件中引入即可

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

本文地址:https://blog.csdn.net/qq_40082314/article/details/108729822

相关标签: Android java