android toolbar
简单的说,就是替代了 actionbar 的另外一个产物。

AppCompatActivity
是替代了 actionbarActivity的另外一个产物。

一,替换 actionbar

1.布局文件

.support.v7.widget.Toolbar     android:id="@+id/toolbar"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:minHeight="?actionBarSize"    android:background="?attr/colorPrimary"// 设置菜单弹出框的样式    // app:popupTheme="@style/ThemeOverlay.AppCompat.Light"// 设置toolbar的样式// app:theme="@style/ToolBarStyle">  "@+id/tv_title"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:singleLine="true"        android:ellipsize="end"        android:layout_gravity="center"        android:gravity="center"        android:textColor="@color/white"        android:textSize="18dp"/> .support.v7.widget.Toolbar>

(1)android:minHeight=”?attr/actionBarSize”:设置标题栏最小高度为ActionBar的高度。
(2)android:background=”?attr/colorPrimary”:该主题下的主色。也就是默认的灰色。

android:theme

Android 5.0 可以给一个 View 单独设置一个 theme 了,其主要用途就是用在 ToolBar 上, 比如 当前使用白色主题但是想使用黑色的 ToolBar ,只要在 ToolBar 的 xml 文件 中添加 android:theme=”@android:style/ThemeOverlay.Material.Dark.ActionBar”

<Toolbar      android:layout_height="?android:attr/actionBarSize"    android:layout_width="match_parent" android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar" />

该功能在 5.0 之前也存在,只是无法单独在 View 上设置而已,比如 5.0之前的 Theme.Holo.Light.DarkActionBar 主题,就是白色主题但是 ActionBar 是黑色。这种底层实现方式是通过一个 actionBarWidgetTheme 来引入一个新的主题

<style name="Theme.Holo.Light.DarkActionBar">    <item name="android:actionBarWidgetTheme">@android:style/Theme.Holostyle>

android:theme 是 5.0 中新添加到 View 上的属性。需要注意的是, 该属性会传递给所有子控件,例如:

<LinearLayout    android:theme="@android:style/ThemeOverlay.Material.Dark">    LinearLayout>

android:theme这个属性,在android3.0以上可以应用到View及其子View的,但是在android3.0以下只能应用到当前的View,是不能使子View起作用的,所有要用到该theme的View都要加上

图片来源网络,阐述了各自属性的位置

2. 主题文件

//toolbar的样式设置          

可以在 v21中设置导航栏背景

<style name="AppTheme" parent="AppTheme.Base">         <item name="android:navigationBarColor">#66cc99item>  style>  

3.menu_main.xml

always:总是显示在界面上
never:不显示在界面上,只让出现在右边的三个点中
ifRoom:如果有位置才显示,不然就出现在右边的三个点中
withText: 可以在导航栏中设置标题,这个标题就是通过 android:title 定义的

"http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:context=".activity.MainActivity">    "@+id/weather"        //优先级,表明摆放的顺序,不一定从0还是计算,但必须大于等于0,建议从0123....这样依次给出        android:orderInCategory="100"        android:title=""        //设置右上角显示的图标        android:icon="@mipmap/weather"        app:showAsAction="ifRoom|withText"        android:textSize="16dp"        android:textColor="@color/white"/>

代码中

    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        if (ViewUtils.isFastClick()) return true;        switch (item.getItemId()) {            //左上角的 默认 home id按钮            case android.R.id.home:                break;            //其他 menu 中的 id按钮事件            case R.id.xx:                break;            default:                break;        }        return super.onOptionsItemSelected(item);    }

PS:实际中,还是点击按钮 弹出自定义的pop 更方便,并且更加适合改动,actionbar 弹出的这个window能设置的属性比较有限,效果也很一般。

5. 代码中设置 toolbar

@Bind(R.id.toolbar) Toolbar mToolBar;//setHomeButtonEnabled这个小于4.0版本的默认值为true的。但是在4.0及其以上是false,该方法的作用:决定左上角的图标是否可以点击。没有向左的小图标。 true 图标可以点击  false 不可以点击。// 给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP//actionBar.setDisplayHomeAsUpEnabled(true)//使左上角图标是否显示,如果设成false,则没有程序图标,仅仅就个标题,否则,显示应用程序图标,对应id为android.R.id.home,// 对应ActionBar.DISPLAY_SHOW_HOME// actionBar.setDisplayShowHomeEnabled(true)// 使自定义的普通View能在title栏显示,即actionBar.setCustomView能起作用,对应ActionBar.DISPLAY_SHOW_CUSTOM//actionBar.setDisplayShowCustomEnabled(true)//对应ActionBar.DISPLAY_SHOW_TITLE。//actionBar.setDisplayShowTitleEnabled(true)//其中setHomeButtonEnabled和setDisplayShowHomeEnabled共同起作用,如果setHomeButtonEnabled设成false,//即使setDisplayShowHomeEnabled设成true,图标也不能点击 private void initToolBar(boolean hideBackButton) {   if (mToolBar == null) {        return;    }  //  设置 titlebar 替代 actionbar  setSupportActionBar(mToolBar); //  获取设置后的对象 android.support.v7.app.ActionBar ab= getSupportActionBar();       if (ab!= null) {        // 设置左上角的自定义图标             ab.setHomeAsUpIndicator(R.mipmap.menu);        // 设置显示        ab.setDisplayHomeAsUpEnabled(true);       }}

问题:
在布局XML中设置Android:navigationIcon=”@drawable/icon”或者在代码中设置都无法自定义成自己需要设置的NavigationIcon图片。

解决办法:
放弃在xml中设置,并且必须在ToolBar初始化之后,setSupportActionBar(toolbar)方法之后,setNavigationIcon()以及各种自定义ToolBar设置(例如:toolbar.setTitle(“Title”);)之前,否者同样无法将设置应用到ToolBar之上。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);toolbar.setNavigationIcon(R.drawable.icon);toolbar.setTitle("My Title");toolbar.setSubtitle("Sub title");toolbar.setLogo(R.drawable.ic_launcher);

这个图来自于网络,很直观,toolbar的各属性

二,单独使用 toolbar

xml 还用之前的就好了。

1. 类中的代码

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); android.support.v7.app.ActionBar ab= getSupportActionBar();       if (actionBar != null) {           ab.setDisplayHomeAsUpEnabled(true);           //隐藏actionbar的 title           ab.setDisplayShowTitleEnabled(false);       }// Logotoolbar.setLogo(R.drawable.ic_launcher);// 一级标题toolbar.setTitle("My Title");// 二级标题toolbar.setSubtitle("Sub title");// 单独设置 toolbar的menu菜单toolbar.inflateMenu(R.menu.activity_main);// Navigation Icon 要設定在 setSupoortActionBar后 才有作用// 否則會出現 back button toolbar.setNavigationIcon(R.drawable.ab_android);//设置点击事件toolbar.setNavigationOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {            }        });// Menu item click 设定在 setSupportActionBar 之后才有作用toolbar.setOnMenuItemClickListener(onMenuItemClick);//脱离actionbar 的 toolbar 自定义点击事件处理private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {  @Override  public boolean onMenuItemClick(MenuItem menuItem) {    switch (menuItem.getItemId()) {      case R.id.xxx:          break;    }    return true;  }};

更多相关文章

  1. Android自动横屏注意事项
  2. 解决CardView无点击效果 实现水波纹效果
  3. Android(安卓)ScrollView 判断到顶到底,和设置到顶到底
  4. android之View属性
  5. android点击邮箱链接跳转发送
  6. android里发送mail的几种方式
  7. AndroidVirtual Devices (AVD)创建、设置
  8. Android(安卓)设置EditText光标Curso颜色及粗细
  9. ReactNative 调用Android(安卓)原生(二)——原生组件

随机推荐

  1. 教你 2 种从 Linux 终端下载文件的方法
  2. 第四届大数据科学与工程国际会议(2019)
  3. 面向边缘计算的资源优化技术研究进展
  4. js之留言板与数组字符串函数
  5. Go微服务入门到容器化实践,落地可观测的微
  6. Server Core App Compatibility
  7. 不产生第三个临时变量的前提交换两组数据
  8. YOLOv5目标检测实战:Jetson Nano部署
  9. 基于安全压缩感知的大数据隐私保护
  10. 专题导读:大数据隐私保护