Toolbar 工具栏 菜单 标题栏 Menu

摘要:
",Toast.LENGTH_SHORT).show();}});}//绑定菜单@OverridepublicbooleanonCreateOptionsMenu{//绑定toobar跟menugetMenuInflater().inflate;returntrue;}//要重写onPrepareOptionsPanel方法才可以显示出图标@OverrideprotectedbooleanonPrepareOptionsPanel{if(menu!=null){if{try{Methodm=menu.getClass().getDeclaredMethod;m.setAccessible;m.invoke;}catch{e.printStackTrace();}}}returnsuper.onPrepareOptionsPanel;}}如果想要修改弹出层的外观,需要去style.xml,加多一项style:false5dp˂!

要使用Toolbar,要先将标题栏(ActionBar)关掉;

style.xml中:
<style name="MainActivityTheme" parent="Theme.AppCompat.Light.NoActionBar"/>
AndroidManifest.xml中:
<activity android:name=".MainActivity" android:theme="@style/MainActivityTheme"></activity>

加入控件:

    <android.support.v7.widget.Toolbar
        android:id="@+id/main_head"android:layout_width="match_parent"android:layout_height="wrap_content">

    </android.support.v7.widget.Toolbar>

接着要建立一个菜单,注意:需要先在res文件夹下建立menu资源文件夹

Toolbar 工具栏 菜单 标题栏 Menu第1张

<?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">
    <item
        android:id="@+id/Search"android:icon="@mipmap/search"android:orderInCategory="1"app:showAsAction="always"android:title="@string/ToolBar_Search"/>

</menu>

android:icon:这个属性是指定每个菜单项左边的图标的
android:id:菜单项的唯一标识
android:orderInCategory:菜单项的优先级,也就是顺序,只能设置大于正整数,数值越大菜单项越靠前
android:title:菜单描述,也就是菜单文字
app:showAsAction:这个是控制菜单项的显示的,never、always、ifRoom

java代码中:

public class MainActivity extends AppCompatActivity {
private Toolbar main_head;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取工具栏
main_head = (Toolbar)findViewById(R.id.main_head);
//设置返回图标
// main_head.setNavigationIcon(R.mipmap.back);
//设置标题文本
main_head.setTitle("微信");
//标题文本颜色
main_head.setTitleTextColor(Color.WHITE);
//设置logo图标
// main_head.setLogo(R.mipmap.wechat);
//副标题
// main_head.setSubtitle("副标题");
//工具栏背景
main_head.setBackgroundColor(Color.rgb(55,55,55));
//使用main_head替换系统自带的ActionBar
setSupportActionBar(main_head);
//点击监听器,该函数要放到setSupportActionBar之后,不然不起作用
main_head.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(),"点击返回!",Toast.LENGTH_SHORT).show();
}
});
}
//绑定菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 绑定toobar跟menu
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
return true;
}
//要重写onPrepareOptionsPanel方法才可以显示出图标
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
if (menu != null) {
if (menu.getClass() == MenuBuilder.class) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onPrepareOptionsPanel(view, menu);
}
}

如果想要修改弹出层的外观,需要去style.xml,加多一项style:

    <!--自定义toolbar菜单样式-->
    <style name="toolbarMenuStyle" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
        <!-- 是否覆盖锚点,默认为true,即盖住Toolbar -->
        <item name="overlapAnchor">false</item>
        <!-- 弹出层背景颜色 -->
        <item name="android:popupBackground">#555555</item>
        <!-- 弹出层垂直方向上的偏移,负值会覆盖toolbar -->
        <item name="android:dropDownVerticalOffset">5dp</item>
        <!-- 弹出层水平方向上的偏移,即距离屏幕左边的距离,负值会导致右边出现空隙 -->
        <item name="android:dropDownHorizontalOffset">-2dp</item>
        <!--文字颜色-->
        <item name="android:textColor">@color/white</item>
    </style>

然后去布局文件给toolbar添加app:popupTheme="@style/toolbarMenuStyle",即给控件绑定style

还要在style.xml给Activity的对应标题栏加上:

    <style name="MainActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="actionOverflowMenuStyle">@style/toolbarMenuStyle</item>
    </style>

添加菜单项点击监听器:

        main_head.setOnMenuItemClickListener(newToolbar.OnMenuItemClickListener() {
             @Override
             public booleanonMenuItemClick(MenuItem menuItem) {
                 String msg = "";
                 switch(menuItem.getItemId()) {
                     caseR.id.search:
                         msg += "search";
                         break;}

                 if(!msg.equals("")) {
                     Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
                 }
                 return true;
             }
        });

PS:修改右边的三点图标

要在style.xml中修改:

<style name="MainActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="actionOverflowMenuStyle">@style/toolbarMenuStyle</item>
        <item name="actionOverflowButtonStyle">@style/OverflowButtonStyle</item>
    </style>

<!--三点按钮-->
    <style name="OverflowButtonStyle" parent="@android:style/Widget.ActionButton.Overflow">
        <item name="android:src">@mipmap/more</item>
    </style>

免责声明:文章转载自《Toolbar 工具栏 菜单 标题栏 Menu》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 属性自定义及使用获取浅析洛谷3393 逃离僵尸岛下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用AVPro Video在Unity中播放开场视频(CG)笔记

游戏需要添加开场CG,调研在Unity中播放视频,采用的插件为AVPro Video,Unity版本为2018.4.0f1 Asset Store:AVPro Video - Core Android Edition 官方文档:https://www.renderheads.com/content/docs/AVProVideo/articles/intr...

MAC连接安卓手机通过adb指令安装apk

Android的apk可以通过adb命令来安装。在MAC电脑上,如果想通过命令行的方式给安卓手机安装apk,需要做以下操作; 一句话概括就是:将安卓SDK的adb命令添加到环境变量中,然后通过adb install方式将apk从电脑上安装到手机中。 具体操作如下: 1、点击Finder,右键选择“前往文件夹”,输入“/etc”,在“操作”中选择“显示简介”...

ViewPager留出边 显示左右两边的视图

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pager_layout" android:layout_w...

辅助模式最终考验的是想象力,先来看看怎么用!| Accessibility

一、序 Hi,大家好,我是承香墨影! Android 的辅助模式(Accessibility)功能非常的强大。基本上被获取到授权之后,可以监听手机上的任何事件,例如:屏幕点击、窗口的变化、以及模拟点击、模拟系统按键等等。 比较常见的实际使用例子,就是一般应用市场,会推荐开启辅助模式,以便在安装 Apk 的时候,自动帮你点击“下一步”和“安装”按钮。还有个...

Android二维码功能实现

最近二维码真是越来越火了,随便电视上、网络上、商场里,到处都是二维码。而内嵌二维码扫描功能的软件也越来越多,QQ、微信、UC浏览器等等应用都可以对着二维码扫一扫,感觉我们自己的应用里不加上二维码扫描功能,都跟不上时代潮流了。所以今天我就将带着大家一起,在我们自己的程序里加入二维码扫描的功能。 不过,二维码功能如果真要做起来还是非常复杂的,从零开始实现不太现...

less的基本用法

Less也是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量,继承,运算, 函数. Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行 (借助 Node.js)。 使用方式 两种使用方式:第一种全局安装less,利用命令编译less;第二种直接引入less.js. npm安装 npm instal...