小菜鸟学习历程之ToolBar
来源:互联网 发布:网络调查问卷app 编辑:程序博客网 时间:2024/05/16 00:29
一、使用步骤
1、给activity设置主题,设置取消ActionBar,否则会报错:
Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
所以可以给acivity设置主题,取消ActionBar
<activity android:name=".ToolBarActivity" android:theme="@style/MyToolBarTheme"/>
取消actinBar有两种方式,style.xml文件如下:
<style name="MyToolBarTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item></style>
或者
<style name="MyToolBarTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item></style>
2、在activity的布局文件里面引入toolbar
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.toolbardemo.MainActivity"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/colorPrimary" app:title="MyToolBar"> <!--此处要用app: 用android: 没有效果,不能修改标题--> </android.support.v7.widget.Toolbar> <TextView android:layout_width="match_parent" android:layout_height="100dp" android:layout_below="@+id/toolbar" android:text="Hello World!" android:gravity="center" android:textSize="18sp" android:textColor="#fff" android:background="#2698e0"/></RelativeLayout>
3、在res文件夹下面创建menu目录,在menu下面创建menu文件,用作toolbar的布局
<?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" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/menu_open" android:icon="@drawable/open" android:title="@string/filter" app:showAsAction="ifRoom" /> <item android:id="@+id/menu_about" android:title="@string/about" app:showAsAction="never" /></menu>
4、在activity里面重写onCreateOptionsMenu 方法,给toolbar设置布局
//给toolbar设置布局 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu); return true; }
*注:第三、四步 不是必须的,可以不设置menu*
5、在activity里面用setSupportActionBar(toolbar) 使用toolbar
package com.toolbardemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.Menu;public class ToolBarActivity extends AppCompatActivity { Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_toolbar); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);//显示左侧按钮 } //给toolbar设置布局 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu); return true; }}
运行效果入下:
6、给menu设置点击事件,有两种方式
(1)、给toolbar设置点击事件
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()){ case R.id.menu_open: Log.i("GUIYU","切换"); break; case R.id.menu_about: Log.i("GUIYU","关于"); break; } return true; } });
(2)、重写onOptionsItemSelected方法
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu_open: Log.i("GUIYU","切换"); break; case R.id.menu_about: Log.i("GUIYU","关于"); break; } return true; }
7、给左侧按钮设置点击事件,同样有两种方式
(1)、给toolbar设置点击事件
toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i("GUIYU","返回"); } });
(2)、重写onOptionsItemSelected方法
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case android.R.id.home: //左侧按钮系统默认id Log.i("GUIYU","左侧"); break; case R.id.menu_open: Log.i("GUIYU","切换"); break; case R.id.menu_about: Log.i("GUIYU","关于"); break; } return true; }
二、样式修改
1、修改toolbar字体和图标的颜色,现在是黑色,可以变成白色
只要设置activity的 样式的parent 为parent=”Theme.AppCompat.NoActionBar”即可,即去掉了Light,这样修改之后activity背景会变成黑色
2、默认Overflow 弹出框会覆盖toolbar,可以给toolbar设置样式,让Overflow 在toolbar下面显示
未修改前样式:
下面给toolbar设置样式
<!--设置OverflowMenu 样式--> <style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark"> <item name="overlapAnchor">false</item> </style>
toolbar引入样式
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/colorPrimary" android:theme="@style/ToolbarPopupTheme" app:title="MyToolBar"> <!--此处要用app: 用android: 没有效果,不能修改标题--> </android.support.v7.widget.Toolbar>
修改样式之后,Overflow就跑到toolbar下面去了
3、修改Overflow 的样式,同样修改toolbar的样式,改变Overflow 的背景色和字体颜色
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark"> <item name="android:colorBackground">@android:color/holo_red_dark</item> <item name="android:textColor">@android:color/white</item> <item name="overlapAnchor">false</item> </style>
4、menu.xml文件中的app:showAsAction=”ifRoom”属性,属性共有三个:ifRoom,always,never
always:总是显示在界面上
never:不显示在界面上,只让出现在右边的三个点中
ifRoom:如果有位置才显示,不然就出现在右边的三个点中
(1)、都设置成never
<?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" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/menu_open" android:icon="@drawable/open" android:title="@string/filter" app:showAsAction="never" /> <item android:id="@+id/menu_about" android:title="@string/about" app:showAsAction="never" /></menu>
运行之后样式为:两个按钮都跑到后面三个点里面去了
(2)、都改成ifRoom,两个按钮都显示,并且三个点没了
(3)、都改成always ,跟ifRoom一样
5、修改左侧按钮图标
只需要在布局文件的 toolbar里面加上一句
app:navigationIcon="@drawable/ic_launcher"
6、修改右侧menu图标,修改toolbar的样式
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark"> <item name="android:colorBackground">@android:color/holo_red_dark</item> <item name="android:textColor">@android:color/white</item> <item name="overlapAnchor">false</item> <item name="actionOverflowButtonStyle">@style/OverlowButtonStyle</item> </style> <!--修改右侧menu图标--> <style name="OverlowButtonStyle" parent="@android:style/Widget.ActionButton.Overflow"> <item name="android:src">@drawable/ic_launcher</item> </style>
7、修改title字体大小和颜色
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/colorPrimary" android:theme="@style/ToolbarPopupTheme" app:navigationIcon="@drawable/ic_launcher" app:title="MyToolBar" app:titleTextColor="#f00" //字体颜色 app:titleTextAppearance="@style/Toolbar.TitleText" //字体大小 > <!--此处要用app: 用android: 没有效果,不能修改标题--> </android.support.v7.widget.Toolbar>
<!--修改toolbar title字体大小--> <style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title"> <item name="android:textSize">10sp</item> </style>
8、修改menu字体颜色和大小
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark"> <item name="android:colorBackground">@android:color/holo_red_dark</item> <item name="android:textColor">@android:color/white</item> <item name="overlapAnchor">false</item> <item name="actionOverflowButtonStyle">@style/OverlowButtonStyle</item> <item name="android:actionMenuTextAppearance">@style/MenuTextStyle</item> <item name="android:actionMenuTextColor">#0f0</item> </style> <!--修改toolbar title字体大小--> <style name="MenuTextStyle"> <item name="android:textSize">30sp</item> </style>
- 小菜鸟学习历程之ToolBar
- 菜鸟之计算机学习历程
- PHP小菜鸟成长历程之初识PHP
- 小菜鸟学习之路
- 一个立志终身学习的菜鸟之-------学习历程
- java菜鸟的学习历程
- C_sharp:一个菜鸟学习历程
- 菜鸟学习历程【11】数据结构
- 菜鸟学习历程【12】链表
- 菜鸟学习历程【21】线程
- 小菜鸟的学习之路!
- iOS 学习小菜鸟之蓝牙corebluetooth
- 小菜鸟的ubuntu学习之路
- java小菜鸟的成长历程
- PHP小菜鸟成长历程之wamp的伪静态和虚拟主机配置
- MaterialDesign 之 ToolBar学习
- Android学习历程-从菜鸟开始
- 菜鸟的Linux历程-学习大纲
- Hive 中的复合数据结构简介以及一些函数的用法说明
- openstack, kvm, qemu-kvm以及libvirt之间的关系
- 每个程序员都绝对必须知道的关于字符集和Unicode的那点儿事
- CSS深入理解流体特性和BFC特性下多栏自适应布局
- velocity语法大全
- 小菜鸟学习历程之ToolBar
- RadioGroup没有文字只显示图片,图片居中问题
- Linux进入目录、创建文件、显示文件分别需要什么权限?
- 2017年小米春招内推面试面经
- [转]测试人员要像医生一样把要测试的程序当自己的病人一样看待一样检测!
- cmake 实例分析,cmake入门
- c++对象内存的分配
- Java中的注解是如何工作的?
- (玩起来)DAX/PowerBI系列