前言自android5.0开始,AppCompatActivity代替ActionBarActivity,而且ToolBar也代替了ActionBar,下面就是ActionBar和ToolBar的使用

ActionBar

1、截图

image.png

2、使用2.1、AppCompatActivity和其对应的ThemeAppCompatActivity使用的是v7的ActionBar(和默认的ActionBar使用起来略有区别,一会代码中会有体现)

Theme的话继承于Theme.AppCompat.Light.DarkActionBar,系统提供的深色系的actionbar,那么按钮,文字,和菜单是白色的//Activity

public class ActionBarActivity extends AppCompatActivity

//style

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

false

2.2、ActionBar的使用获取actionbar:

//AppCompatActivity use v7 action bar

actionBar = this.getSupportActionBar();        //Activity use action bar

//actionBar = this.getActionBar();

if(actionBar == null){            return;

}设置主副标题//主标题

actionBar.setTitle("ActionBar Title");        //副标题

actionBar.setSubtitle("Sub Title");设置navigation up按钮:可见+可用+更换图标//左侧按钮:可见+可用+更换图标

actionBar.setDisplayHomeAsUpEnabled(true);

actionBar.setHomeButtonEnabled(true);        //actionBar.setHomeAsUpIndicator(R.mipmap.back_white);设置navigation up按钮的监听:复写onSupportNavigateUp(),

/**

* 复写:左侧按钮点击动作

* android.R.id.home

* v7 actionbar back event

* 注意:如果复写了onOptionsItemSelected方法,则onSupportNavigateUp无用

* */

@Override

public boolean onSupportNavigateUp() {

finish();        return super.onSupportNavigateUp();

}    /**

* 复写:左侧按钮点击动作

* android.R.id.home

* actionbar back event

* 注意:如果复写了onOptionsItemSelected方法,则onSupportNavigateUp无用    @Override

public boolean onNavigateUp() {

finish();

return super.onNavigateUp();

}* */设置logo(icon等):用logo代替icon,不知道为什么不灵??//设置logo

actionBar.setLogo(android.R.mipmap.sym_def_app_icon);

actionBar.setDisplayUseLogoEnabled(true);        //设置icon:use logo instead of an icon

//actionBar.setIcon(R.mipmap.ic_launcher);设置菜单menu和对应监听:android.R.id.home就是左侧的navigation up按钮/**

* 复写:添加菜单布局

* */

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.menu, menu);        return true;

}    /**

* 复写:设置菜单监听

* */

@Override

public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {                //actionbar navigation up 按钮

case android.R.id.home:

finish();                break;            case R.id.action_refresh:

Toast.makeText(this, "Refresh selected", Toast.LENGTH_SHORT).show();                break;            case R.id.action_add:

Toast.makeText(this, "Add selected", Toast.LENGTH_SHORT).show();                break;            case R.id.action_settings:

Toast.makeText(this, "Settings selected", Toast.LENGTH_SHORT).show();                break;            default:                break;

}        return true;

}设置tab和对应监听//增加actionbar 下面的tab按钮

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

actionBar.addTab(actionBar.newTab().setText("Tab 1").setTabListener(new ActionBar.TabListener() {            @Override

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

Toast.makeText(ActionBarActivity.this, "Tab 1 select",Toast.LENGTH_SHORT).show();

}            @Override

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }            @Override

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }

}));

actionBar.addTab(actionBar.newTab().setText("Tab 2").setTabListener(new ActionBar.TabListener() {            @Override

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

Toast.makeText(ActionBarActivity.this, "Tab 2 select",Toast.LENGTH_SHORT).show();

}            @Override

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }            @Override

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }

}));或者完全自定义//自定义

actionBar.setCustomView(R.layout.actionbar_title);

actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);隐藏、显示actionbarcase R.id.btn_hide:                if(actionBar != null){

/**

* 隐藏actionbar

* 1、有actionbar情况下:actionBar.hide();

* 2、直接使用Theme.Holo.NoActionBar

* 3、theme中添加属性

*      false

*      true

* 4、在setContent之前 Window feature must be requested before adding content

*    AppCompatActivity: supportRequestWindowFeature(Window.FEATURE_NO_TITLE),

*    Activity: requestWindowFeature(Window.FEATURE_NO_TITLE);

*

* */

actionBar.hide();

}                break;            case R.id.btn_show:                if(actionBar != null){

actionBar.show();

}                break;

-------------------------------------分割线-------------------------------

Menu(共通的菜单,不细说)

1、showAsAction属性always表示永远显示在ActionBar中,如果屏幕空间不够则无法显示

ifRoom表示屏幕空间够的情况下显示在ActionBar中,不够的话就显示在overflow中

never则表示永远显示在overflow中

withText:这个值使菜单项和它的图标,文本一起显示

2、布局<?xml  version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android">

android:id="@+id/action_refresh"

android:icon="@mipmap/refresh"

android:title="Refresh"

app:showAsAction="always" />

android:id="@+id/action_add"

android:icon="@mipmap/add"

android:title="Add"

app:showAsAction="ifRoom" />

android:id="@+id/action_settings"

android:icon="@mipmap/settings"

android:title="Settings"

app:showAsAction="never">

-------------------------------------分割线-------------------------------

ToolBar

了解了ActionBar的话,那么ToolBar和其差不多,更加强大,更加符合MD风格,然后就代替ActionBar,使用起来差不多,但是又UI上的坑

1、截图:颜色不正常的

image.png

2、使用2.1、隐藏ActionBar有4中方式1、如果继承了theme有actionbar的则,在setContentView方法之前设置:v7的supportRequestWindowFeature(Window.FEATURE_NO_TITLE);或者非v7的requestWindowFeature(Window.FEATURE_NO_TITLE);

2、theme直接继承没有actionbar的,比如说:Theme.AppCompat.Light.NoActionBar

3、theme中没设置属性没有actionbar:false

true

4、actionBar.hide();2.2、AppCompatActivity和其对应的Theme//activity

public class ToolBarActivity extends AppCompatActivity

//style

false

true

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

false

ToolBar的使用toolbar在layout中布局代码:

android:id="@+id/toolbar"

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="match_parent"

android:background="?attr/colorPrimary"

android:layout_height="wrap_content"

android:minHeight="?attr/actionBarSize">

获取toolbar并取代actionbar,这里设置toolbar的标题必须在setSupportActionBar之前,否则无用//隐藏默认actionbar

ActionBar actionBar = getSupportActionBar();        if(actionBar != null){

actionBar.hide();

}        //获取toolbar

toolBar = findViewById(R.id.toolbar);        //主标题,必须在setSupportActionBar之前设置,否则无效,如果放在其他位置,则直接setTitle即可

toolBar.setTitle("ToolBar Title");        //用toolbar替换actionbar

setSupportActionBar(toolBar);设置副标题//副标题+颜色

toolBar.setSubtitle("Sub Title");设置navigation up按钮的图标和点击监听//左侧按钮:可见+更换图标+点击监听

getSupportActionBar().setDisplayHomeAsUpEnabled(true);//显示toolbar的返回按钮

//toolBar.setNavigationIcon(R.mipmap.back_white);

toolBar.setNavigationOnClickListener(new View.OnClickListener() {            @Override

public void onClick(View v) {

finish();

}

});设置logo//设置logo

toolBar.setLogo(android.R.mipmap.sym_def_app_icon);设置菜单menu及其监听/**

* 复写:添加菜单布局

* */

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.menu, menu);        return true;

}    /**

* 复写:设置菜单监听

* */

@Override

public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case R.id.action_refresh:

Toast.makeText(this, "Refresh selected", Toast.LENGTH_SHORT).show();                break;            case R.id.action_add:

Toast.makeText(this, "Add selected", Toast.LENGTH_SHORT).show();                break;            case R.id.action_settings:

Toast.makeText(this, "Settings selected", Toast.LENGTH_SHORT).show();                break;            default:                break;

}        return true;

}加载自定义toolbar:直接在toolbar的layout中写即可,可以是文字居中等等

隐藏、显示toolbarcase R.id.btn_hide:                if(toolBar != null){

toolBar.setVisibility(View.GONE);

}                break;            case R.id.btn_show:                if(toolBar != null){

toolBar.setVisibility(View.VISIBLE);

}                break;

3、截图:颜色正常的

4、用ToolBar 的Theme和PopupTheme来控制颜色正常,或自定义颜色4.1、ToolBar显然颜色不对,那找找为啥ActionBar的时候对的,直觉告诉我是theme的问题,于是找Theme.AppCompat.Light.DarkActionBar,点击进去看会看到actionBarPopupThem是Light的,就是menu菜单点击弹出那个

actionBarTheme是深色系的,那么控制按钮图标和主副标题颜色就是白色的

@style/ThemeOverlay.AppCompat.Light

@null

@style/ThemeOverlay.AppCompat.Dark.ActionBar

@drawable/abc_list_selector_holo_dark

@color/primary_dark_material_dark

@color/primary_material_dark

4.2、新建Toolbar的theme和popuptheme:这里面就是继承刚刚找到的东西,当然也可以再自定义颜色咯

4.3、添加Toolbar的theme和popuptheme//需添加

xmlns:app="http://schemas.android.com/apk/res-auto"

省略...

app:theme="@style/MyDarkToolBarTheme"

app:popupTheme="@style/MyLightPopupTheme">

作者:Kandy_JS

链接:https://www.jianshu.com/p/81d0bcb282cb

android actionbar分割线,Android ActionBar和ToolBar的使用相关推荐

  1. android阴影分割线,android shape的使用及渐变色、分割线、边框、半透明阴影

    shape使用.渐变色.分割线.边框.半透明.半透明阴影效果. 首先简单了解一下shape中常见的属性.(详细介绍参看 api文档) xmlns:android="http://schema ...

  2. android 绘制分割线,Android EditText在其drawable和它的文本之间绘制一个分隔线

    >在res / drawable / shape.xml中创建一个矩形圆角形状 >现在创建一个布局 android:layout_width="match_parent" ...

  3. android 自定义命名空间,Android自定义ActionBar实例

    本文实例讲述了android自定义actionbar的实现方法.分享给大家供大家参考.具体实现方法如下: android 3.0及以上已经有了actionbar的api,可以通过引入support p ...

  4. android actionbar 文字居中,ActionBar设置自定义布局使文字居中

    在ToolBar出现之前,安卓顶部使用的是ActionBar技术,但是系统自带的ActionBar有几个问题,一是系统自带的返回键是一个小于号,Title文字的位置也默认在左边.如果有产品要求我们做出 ...

  5. Android Jetpack之AppCompat - Actionbar篇

    今天我们来聊一聊有关AppCompat,作为Android Jetpack系列文章的开篇.说到Android Jetpack,我们先看一下这张图: 从图中我们可以看到,整个Android Jetpac ...

  6. 【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/3926916 ...

  7. 【Android 应用开发】 ActionBar 基础

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3920439 ...

  8. Android网络课程笔记-----Actionbar的实现方式

    Google Style App 1. Gmail.Google+.GoogleMap       碎片化问题: 1) 多版本共存 2) 多分辨率共存 3) 屏幕密度           举例:同样是 ...

  9. Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色...

    android:orientation="vertical"(AndroidStudio不提示,这个要记住了) 昨天好不容易把ActionBar从溢出菜单overflow中弄出来了 ...

最新文章

  1. 黄聪:《跟黄聪学WordPress插件开发》
  2. python判断成语_python正则表达式抓取成语网站
  3. 进程、后台进程以及信号
  4. web应用插件开发_Web应用程序的简单插件系统
  5. C/C++语言函数学习(3)STL中map容器
  6. Patrick Hughes - 错觉3D雕塑艺术
  7. 编程杂谈---vb,vb.net,java数据类型区分
  8. Capital Asset Pricing Model (CAPM)
  9. IDEA失去焦点,取消自动编译【已解决】
  10. java redis 抽奖_GitHub - zenmin/luckdraw: 年会抽奖程序 Java开发 可内定中奖人员 一键导入员工 使用简单...
  11. 如何用卡诺图化简带有约束条件的逻辑函数?
  12. Pr 音频效果参考:延迟与回声
  13. ios 图表_在ios应用中实现蜘蛛网图表
  14. 【优化】共轭函数(Conjugate Function)超简说明
  15. 高通ims架构android,深度揭密高通4/5G移动基带消息系统和状态机
  16. mysql 8 全文检索_MySQL 8中使用全文检索示例
  17. NYOJ 无主之地1
  18. 怎么把PicPick设置成中文版?
  19. DBCA静默安装Oracle数据库
  20. 世界上最难的5种编程语言

热门文章

  1. 手动清除MY123.com
  2. 中国聚合支付行业市场全景调研及投资价值评估研究报告
  3. mysql 错误2020_mysqldump: Error 2020: Got packet bigger than ‘max
  4. spring @Transactional事务未提交导致的并发问题
  5. Linux安装使用telnet
  6. CST粒子工作室学习笔记———旋转操作
  7. namenode功能与作用机制
  8. js 替换字符串中所有 “ 引号 —— 数据处理
  9. 模电——MOS管接下拉电阻
  10. 逻辑视图、实现视图、进程视图、部署视图和用例视图