Toolbar使用之踩过的坑

  • toolbar是v7包中的类安卓5.0推出,自2014年谷歌io大会上的md风格的设计

  • toolbar作用:代替ActionBar使用,继承自viewgroup

  • 要使用toolbar,需要设置主题为AppCompat,并且主题设置里面不要actionbar

 
 
  1. <style name="ToolbarTheme.Base" parent="Theme.AppCompat">
  2.        <item name="windowActionBar">false</item>
  3.        <item name="windowNoTitle">true</item>
  4. </style>
  • xml文件和activity中设置toolbar

 
 
  1.  <android.support.v7.widget.Toolbar
  2.        android:id="@+id/toolbar"
  3.        android:layout_width="match_parent"
  4.        android:layout_height="?attr/actionBarSize"/>
 
 
  1. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  2. setSupportActionBar(toolbar);
  • menu菜单文件

  
  
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android"
  2.    xmlns:app="http://schemas.android.com/apk/res-auto"
  3.    xmlns:tools="http://schemas.android.com/tools">
  4.    <item
  5.        android:id="@+id/action_settings"
  6.        android:orderInCategory="102"
  7.        android:title="@string/action_settings"
  8.        app:showAsAction="always" />
  9.    <item
  10.        android:id="@+id/action_about"
  11.        android:orderInCategory="106"
  12.        android:title="关于"
  13.        app:showAsAction="never" />
  14.    <item
  15.        android:orderInCategory="103"
  16.        android:title="item1"
  17.        app:showAsAction="never" />
  18.    <item
  19.        android:orderInCategory="104"
  20.        android:title="item2"
  21.        app:showAsAction="never" />
  22. </menu>
运行效果为:


  • 发现toolbar和下面的内容界面都是黑色,这个问题是主题引起的,修改主题样式为light,并区分toolbar和内容界面的背景色

 
 
  1.    <style name="ToolbarTheme.Base" parent="Theme.AppCompat.Light">
  2.        <item name="windowActionBar">false</item>
  3.        <item name="windowNoTitle">true</item>        //设置actionbar的背景色
  4.        <item name="colorPrimary">@color/colorPrimary</item>
  5.    </style>
 
 
  1.    <android.support.v7.widget.Toolbar
  2.        android:id="@+id/toolbar"
  3.        android:layout_width="match_parent"
  4.        android:layout_height="?attr/actionBarSize"
  5.        android:background="?attr/colorPrimary" />

上面的主题可以偷懒写

 
 
  1. <style name="ToolbarTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
  2.        <item name="colorPrimary">@color/colorPrimary</item>
  3.    </style>

效果:


还可设置状态栏的背景色

 
 
  1.  <style name="ToolbarTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
  2.        <item name="colorPrimary">@color/colorPrimary</item>
  3.        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  4.    </style>

效果:


  • 修改toolbar的title文字颜色,在style主题中添加item,这样修改的就是应用的文字颜色为白色

 
 
  1. <item name="android:textColorPrimary">@color/white</item>


  • 为toolar加上返回上一级界面的箭头:activity中添加toolbar代码

 
 
  1. ActionBar actionBar = getSupportActionBar();
  2. actionBar.setDisplayHomeAsUpEnabled(true);
 
 
  1.   @Override
  2.    public boolean onOptionsItemSelected(MenuItem item) {
  3.        switch (item.getItemId()) {
  4.            case R.id.action_settings:
  5.                Toast.toastShort("Setting");
  6.                return true;
  7.            default:
  8.                return super.onOptionsItemSelected(item);     }


  • 发现返回箭头和右上角的menu折叠三个点为黑色的,一般应用使用的是白色的,这个问题出现的原因是app设置的主题是light(浅色主题,内容区域为白色背景,箭头为黑色),这里需要设置toolbar的主题为dark(深色主题,内容区域为黑色背景,箭头为白色)

 
 
  1.  <android.support.v7.widget.Toolbar
  2.        android:id="@+id/toolbar"
  3.        android:layout_width="match_parent"
  4.        android:layout_height="?attr/actionBarSize"
  5.       app:theme="@style/ToolbarTheme"//为了兼容使用app命名空间
  6.        android:background="?attr/colorPrimary" />
 
 
  1. <style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>


  • 修改toolbar的title文字的大小和重新设置颜色,需要设置title的样式

 
 
  1. app:titleTextAppearance="@style/ToolBarTitleText"
 
 
  1.    <style name="ToolBarTitleText" parent="TextAppearance.AppCompat.Medium">
  2.        <item name="android:textColor">@color/red</item>
  3.        <item name="android:textSize">20sp</item>
  4.        <item name="android:textStyle">bold</item>
  5.    </style>
  • 设置menu文字的颜色和大小,在toolber主题中设置

 
 
  1. app:theme="@style/ToolbarTheme"
 
 
  1. <style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
  2.        <item name="actionMenuTextColor">@color/blue_light</item>
  3.        <item name="android:actionMenuTextAppearance">@style/ToolbarMenuTextSize</item>
  4.    </style>
  5.    <style name="ToolbarMenuTextSize" parent="Base.TextAppearance.AppCompat.Menu">
  6.        <item name="android:textSize">12sp</item>
  7.    </style>

  • 点击界面右上角三个点展示的是我们设置的popupmneu弹窗,背景色为黑色,是因为我们的toolbar的主题使用的是drak深色主题,所以背景色为黑色,字体为白色


  • 修改popupmenu弹窗的背景色和文字颜色和文字大小,在toolbar中设置popuptheme主题

  
  
  1. app:popupTheme="@style/ToolbarPopupTheme"
   
   
  1.    <style name="ToolbarPopupTheme" parent="Theme.AppCompat">
  2.        <!--设置背景色为灰色-->
  3.        <item name="android:colorBackground">@color/Gray_e</item>
  4.        <!--menu菜单的文字颜色设置-->
  5.        <item name="android:textColorPrimary">@color/c_xiuxiu</item>
  6.        <!--菜单文字的大小-->
  7.        <item name="android:textSize">12sp</item>
  8.    </style>


  • toolbar其他属性的设置

   
   
  1.    <android.support.v7.widget.Toolbar
  2.        android:id="@+id/toolbar"
  3.        android:layout_width="match_parent"
  4.        android:layout_height="?attr/actionBarSize"
  5.        android:background="?attr/colorPrimary"
  6.        app:logo="@mipmap/ic_launcher"
  7.        app:navigationIcon="@mipmap/icon_back"
  8.        app:popupTheme="@style/ToolbarPopupTheme"
  9.        app:subtitle="subtitle"
  10.        app:theme="@style/ToolbarTheme"
  11.        app:title="ToolBar"
  12.        app:titleTextAppearance="@style/ToolBarTitleText" />
这些属性也可通过在代码总进行设置
  • 总结

  1. 使用ToolBar需要线设置Activity的主题样式为AppCompat,并且设置NoActionBar.主题样式主要分浅色light,和深色dark

  2. 可以在主题设置中定义主题颜色和主题文字颜色

  3. 设置toolbar返回上一届功能,需要在activity中设置setSupportActionBar,和setDisplayHomeAsUpEnabled(true)方法,和点击事件

  4. 修改toolbar返回箭头和menu菜单三个点的颜色,需要设置toolbar的主题-app:theme

  5. 设置menu文字颜色和大小样式,在toolbar主题中进行设置acitonMenuTextColor

  6. 修改toolbar的title文字颜色和大小,需要设置app:titleTextAppearance样式

  7. 设置menu菜单的popup弹窗的背景色,文字颜色和大小等样式,需要设置popupTheme主题


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值