Toolbar的简单使用

Toolbar的简单使用

标签: androidToolbar
43人阅读 评论(0) 收藏 举报
分类:

目录(?)[+]

  1. Toolbar的简单使用
    1. 前言由于之前项目都没怎么使用toobar今天心血来潮就写了个demo熟悉下免得以后用到还得花时候查资料顺便做下笔记go 
    2. 二开始引入 
      1. 首先就是在布局文件中使用很简单就跟平常控件一样用就可以 
    3. 三看了效果图结合代码其它的不难理解 下面就着重说一下菜单那部分的实现 也就后面的三个点点点
      1. 首先我们要为toolbar绑定一个菜单如下 
      2. 其中Rmenumenu_main是我们创建的一个菜单文件代码如下 
      3. 还有个小问题就是正常的设置完之后菜单item图标是不会显示的我们需要重写onPrepareOptionsPanelView view Menu menu方法这样才能正常显示图标代码如下 
      4. 设置菜单的点击事件前面我们已经看到了toolbarsetOnMenuItemClickListeneronMenuItemClick这句代码那么onMenuItemClick的实现如下 
    4. 五经过上面的介绍其实已经能够使用Toolbar做挺多事情了那么下面利用ToolBar配合DrawerLyout快速实现一个侧滑菜单看看
      1. 布局文件实现这里我写得比较乱又有点偷懒不想改了还是比较建议多使用include的方式的

Toolbar的简单使用


前言:由于之前项目都没怎么使用toobar,今天心血来潮就写了个demo熟悉下,免得以后用到还得花时候查资料,顺便做下笔记!go。。。 


一、Toobar是5.0之后出来的,可以说出来之后就取代了ActionBar了(反正我身边的开发人员都不用ActionBar了),好处就不说了,用了之后好不好自己自然有所感觉,要注意的是要兼容5.0以下就使用V7包下的Toobar哦!


二、开始引入 

1、首先就是在布局文件中使用,很简单,就跟平常控件一样用就可以! 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:id="@+id/activity_main"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent">  
  7.   
  8.     <android.support.v7.widget.Toolbar  
  9.         android:background="@color/app_bg"  
  10.         android:id= "@+id/toolbar"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="?attr/actionBarSize">  
  13.     </android.support.v7.widget.Toolbar>  
  14. </RelativeLayout>  
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:background="@color/app_bg"
        android:id= "@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize">
    </android.support.v7.widget.Toolbar>
</RelativeLayout>


2、由于我们在代码用是以setSupportActionBar(toolbar)的方式去使用toolbar的,一也就是代替actionbar,那么我们就需要把actionbar去掉,一山不容二虎!!!去掉actionbar要自定义下主题,自定义一个Base.AppTheme样式 

  1. <resources>  
  2.     <style name="Base.AppTheme" parent="Theme.AppCompat">  
  3.         <!--去掉原来的ActionBar-->  
  4.         <item name="windowActionBar">false</item>  
  5.         <item name="android:windowNoTitle">true</item>  
  6.         <!-- API Level 22 编译要去点android -->  
  7.         <item name="windowNoTitle">true</item>  
  8.   
  9.         <!-- Actionbar color -->  
  10.         <item name="colorPrimary">@color/material_deep_teal_500</item>  
  11.         <!--Status bar color-->  
  12.         <item name="colorPrimaryDark">@color/material_deep_teal_500</item>  
  13.         <!--Window color-->  
  14.         <item name="android:windowBackground">@color/dim_foreground_material_dark</item>  
  15.     </style>  
  16.   
  17.     <!-- Base application theme. -->  
  18.     <style name="AppTheme" parent="Base.AppTheme">  
  19.   
  20.      <!-- 这个属性之所以注释掉是因为它只能在5.0之后使用,所以一定要定义它的话需要在/res/valuse-v21/sytles.xml中进行定义 -->  
  21.     <!-- <item name="android:navigationBarColor">@color/accent_material_light</item> -->  
  22.     </style>  
  23. </resources>  
<resources>
    <style name="Base.AppTheme" parent="Theme.AppCompat">
        <!--去掉原来的ActionBar-->
        <item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>
        <!-- API Level 22 编译要去点android -->
        <item name="windowNoTitle">true</item>

        <!-- Actionbar color -->
        <item name="colorPrimary">@color/material_deep_teal_500</item>
        <!--Status bar color-->
        <item name="colorPrimaryDark">@color/material_deep_teal_500</item>
        <!--Window color-->
        <item name="android:windowBackground">@color/dim_foreground_material_dark</item>
    </style>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Base.AppTheme">

     <!-- 这个属性之所以注释掉是因为它只能在5.0之后使用,所以一定要定义它的话需要在/res/valuse-v21/sytles.xml中进行定义 -->
    <!-- <item name="android:navigationBarColor">@color/accent_material_light</item> -->
    </style>
</resources>


至此,我们的toobar已经可以正常显示出来了,不过先不急,我们先设置一些标题、logo、之类的东西再看效果,不过先看看google提供的图也可以的: 



代码中对toolbar最基本的设置: 

  1. public class MainActivity extends AppCompatActivity {  
  2.   
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.   
  8.         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);  
  9.   
  10.         // Logo  
  11.         toolbar.setLogo(R.mipmap.push_4);  
  12.   
  13.         // 主标题  
  14.         toolbar.setTitle("Title");  
  15.   
  16.         // 副标题  
  17.         toolbar.setSubtitle("Sub Title");  
  18.   
  19.         //设置toolbar  
  20.         setSupportActionBar(toolbar);  
  21.   
  22.         //左边的小箭头(注意需要在setSupportActionBar(toolbar)之后才有效果)  
  23.         toolbar.setNavigationIcon(R.mipmap.back);  
  24.   
  25.         //菜单点击事件(注意需要在setSupportActionBar(toolbar)之后才有效果)  
  26.         toolbar.setOnMenuItemClickListener(onMenuItemClick);  
  27.     }  
  28. }  
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

        // Logo
        toolbar.setLogo(R.mipmap.push_4);

        // 主标题
        toolbar.setTitle("Title");

        // 副标题
        toolbar.setSubtitle("Sub Title");

        //设置toolbar
        setSupportActionBar(toolbar);

        //左边的小箭头(注意需要在setSupportActionBar(toolbar)之后才有效果)
        toolbar.setNavigationIcon(R.mipmap.back);

        //菜单点击事件(注意需要在setSupportActionBar(toolbar)之后才有效果)
        toolbar.setOnMenuItemClickListener(onMenuItemClick);
    }
}

经过初步设计后,我们就可以看看最原始的效果了!!



三、看了效果图,结合代码其它的不难理解 ,下面就着重说一下菜单那部分的实现 ,也就后面的三个点点点

1、首先我们要为toolbar绑定一个菜单,如下: 

  1. @Override  
  2. public boolean onCreateOptionsMenu(Menu menu) {  
  3.     // 绑定toobar跟menu  
  4.     getMenuInflater().inflate(R.menu.menu_main, menu);  
  5.     return true;  
  6. }  
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // 绑定toobar跟menu
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

2、其中R.menu.menu_main是我们创建的一个菜单文件,代码如下: 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       xmlns:app="http://schemas.android.com/apk/res-auto"  
  4.       xmlns:tools="http://schemas.android.com/tools"  
  5.       tools:context=".MainActivity">  
  6.   
  7.     <item  
  8.         android:id="@+id/action_edit"  
  9.         android:icon="@mipmap/push_3"  
  10.         android:orderInCategory="80"  
  11.         android:title="@string/action_edit"  
  12.         app:showAsAction="never"/>  
  13.   
  14.     <item  
  15.         android:id="@+id/action_share"  
  16.         android:icon="@mipmap/push_3"  
  17.         android:orderInCategory="90"  
  18.         android:title="@string/action_edit"  
  19.         app:showAsAction="never"/>  
  20.   
  21.     <item  
  22.         android:id="@+id/action_settings"  
  23.         android:icon="@mipmap/push_3"  
  24.         android:orderInCategory="100"  
  25.         android:title="@string/action_settings"  
  26.         app:showAsAction="never"/>  
  27. </menu>  
<?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/action_edit"
        android:icon="@mipmap/push_3"
        android:orderInCategory="80"
        android:title="@string/action_edit"
        app:showAsAction="never"/>

    <item
        android:id="@+id/action_share"
        android:icon="@mipmap/push_3"
        android:orderInCategory="90"
        android:title="@string/action_edit"
        app:showAsAction="never"/>

    <item
        android:id="@+id/action_settings"
        android:icon="@mipmap/push_3"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never"/>
</menu>

下面解析下菜单项的几个属性:
  • android:icon:这个属性是指定每个菜单项左边的图标的
  • android:id:菜单项的唯一标识
  • android:orderInCategory:菜单项的优先级,也就是顺序,只能设置大于正整数,数值越大菜单项越靠前
  • android:title:菜单描述,也就是菜单文字
  • app:showAsAction:这个是控制菜单项的显示的
其中app:showAsAction这个属性是比较有意思的我们一个个看看他的值都表示什么!

always:设置这个值会让所有菜单项都会显示在toolbar上 



ifRoom:设置这个值之后,如果toolbar上还有空间的话就会显示优先级高的菜单项在toolbar上,剩下的才显示在弹出的列表中 



never:永远不会显示在Toolbar上,只会在溢出列表中出现 

withText:这个属性我看了下效果是跟never一个样不知道是不是我哪里没设置对!!! 

collapseActionView:这个属性通俗的说就是声明某一个菜单项单独显示在toolbar上,而不是显示在打开的菜单中,一般配合ifRoom使用,如下: 




3、还有个小问题,就是正常的设置完之后菜单item图标是不会显示的,我们需要重写onPrepareOptionsPanel(View view, Menu menu)方法,这样才能正常显示图标,代码如下: 

  1. @Override  
  2. protected boolean onPrepareOptionsPanel(View view, Menu menu) {  
  3.     if (menu != null) {  
  4.         if (menu.getClass() == MenuBuilder.class) {  
  5.             try {  
  6.                 Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);  
  7.                 m.setAccessible(true);  
  8.                 m.invoke(menu, true);  
  9.             } catch (Exception e) {  
  10.                 e.printStackTrace();  
  11.             }  
  12.         }  
  13.     }  
  14.     return super.onPrepareOptionsPanel(view, menu);  
  15. }  
@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);
}


4、设置菜单的点击事件,前面我们已经看到了toolbar.setOnMenuItemClickListener(onMenuItemClick);这句代码,那么onMenuItemClick的实现如下: 

  1. private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {  
  2.     @Override  
  3.     public boolean onMenuItemClick(MenuItem menuItem) {  
  4.         String msg = "";  
  5.         switch (menuItem.getItemId()) {  
  6.             case R.id.action_edit:  
  7.                 msg += "Click edit";  
  8.                 break;  
  9.             case R.id.action_share:  
  10.                 msg += "Click share";  
  11.                 break;  
  12.             case R.id.action_settings:  
  13.                 msg += "Click setting";  
  14.                 break;  
  15.         }  
  16.   
  17.         if(!msg.equals("")) {  
  18.             Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();  
  19.         }  
  20.         return true;  
  21.     }  
  22. };  
private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem menuItem) {
        String msg = "";
        switch (menuItem.getItemId()) {
            case R.id.action_edit:
                msg += "Click edit";
                break;
            case R.id.action_share:
                msg += "Click share";
                break;
            case R.id.action_settings:
                msg += "Click setting";
                break;
        }

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

5、这样,菜单的基本功能就实现了,虽然大家都说程序员的审美观都不是很好(说这话的站出来,保证不打死你,,)大家有木有觉得黑乎乎的很难看?并且位置把toolbar都挡住了,对于有强迫症的我来说使无法容忍的,那么我们就修整一下吧! 


其实我们可以通过toobar的app:popupTheme="@style/menu_bg"属性来指定一个自定义的样式,而那么这个样式具体能定义写什么呢,我们详细看看: 

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

    <!-- 是否覆盖锚点,默认为true,即盖住Toolbar -->
    <item name="overlapAnchor">false</item>

    <!-- 弹出层背景颜色 -->
    <item name="android:popupBackground">@color/material_deep_teal_500</item>

    <!-- 弹出层垂直方向上的偏移,负值会覆盖toolbar -->
    <item name="android:dropDownVerticalOffset">5dp</item>

    <!-- 弹出层水平方向上的偏移,即距离屏幕左边的距离,负值会导致右边出现空隙 -->
    <item name="android:dropDownHorizontalOffset">-2dp</item>

    <!--文字颜色-->
    <item name="android:textColor">@color/toolbar_meun</item>
</style>


定义好样式后需要在app的主题中引用该样式,才能改变溢出框内的文字颜色,如下: 

  1. <!-- Base application theme. -->  
  2. <style name="AppTheme" parent="Base.AppTheme">  
  3.     <!--指定toolbar弹出菜单样式-->  
  4.     <item name="actionOverflowMenuStyle">@style/toolbarMenuStyle</item>  
  5. </style>  
<!-- Base application theme. -->
<style name="AppTheme" parent="Base.AppTheme">
    <!--指定toolbar弹出菜单样式-->
    <item name="actionOverflowMenuStyle">@style/toolbarMenuStyle</item>
</style>

最后在toolbar中引用: 

  1. <android.support.v7.widget.Toolbar  
  2.     android:background="@color/material_deep_teal_500"  
  3.     android:id= "@+id/toolbar"  
  4.     android:layout_width="match_parent"  
  5.     app:popupTheme="@style/toolbarMenuStyle"  
  6.     android:layout_height="?attr/actionBarSize">  
  7. </android.support.v7.widget.Toolbar>  
<android.support.v7.widget.Toolbar
    android:background="@color/material_deep_teal_500"
    android:id= "@+id/toolbar"
    android:layout_width="match_parent"
    app:popupTheme="@style/toolbarMenuStyle"
    android:layout_height="?attr/actionBarSize">
</android.support.v7.widget.Toolbar>

ok,至此我们对toolbar溢出框的调整已经初步完成,看看效果如何: 



四、到了这里,我们已经能简单的使用ToolBar了,那么需求随时都会改变的,比如说有的人就不需要logo、也不需要主标题副标题等,他就要在toolbar上加个搜索框!或者是要只要主标题,并且主标题要居中显示,那也只能做咯,毕竟产品经常被砍也不是没有原因的!


如果你有过这样的需求,你会发现原生的ToolBar的主标题是没法居中显示的,所以我们需要将主标题设置为空,然后自己写一个标题到ToolBar中,然后设置居中显示:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  5.     android:id="@+id/activity_main"  
  6.     android:layout_width="match_parent"  
  7.     android:layout_height="match_parent">  
  8.   
  9.     <android.support.v7.widget.Toolbar  
  10.         android:background="@color/material_deep_teal_500"  
  11.         android:id= "@+id/toolbar"  
  12.         android:layout_width="match_parent"  
  13.         app:popupTheme="@style/toolbarMenuStyle"  
  14.         android:layout_height="?attr/actionBarSize">  
  15.   
  16.         <TextView  
  17.             android:layout_gravity="center"  
  18.             android:textColor="@color/toolbar_meun"  
  19.             android:textSize="24sp"  
  20.             android:text="ToolBar"  
  21.             android:layout_width="wrap_content"  
  22.             android:layout_height="wrap_content"/>  
  23.     </android.support.v7.widget.Toolbar>  
  24. </RelativeLayout>  
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:background="@color/material_deep_teal_500"
        android:id= "@+id/toolbar"
        android:layout_width="match_parent"
        app:popupTheme="@style/toolbarMenuStyle"
        android:layout_height="?attr/actionBarSize">

        <TextView
            android:layout_gravity="center"
            android:textColor="@color/toolbar_meun"
            android:textSize="24sp"
            android:text="ToolBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </android.support.v7.widget.Toolbar>
</RelativeLayout>


注意,需要在代码中对主标题设置为空字符串,否则会出现默认的主标题: 

  1. // 主标题  
  2. toolbar.setTitle("");   
// 主标题
toolbar.setTitle(""); 


五、经过上面的介绍,其实已经能够使用Toolbar做挺多事情了,那么下面利用ToolBar配合DrawerLyout快速实现一个侧滑菜单看看!


1、布局文件实现,这里我写得比较乱,又有点偷懒不想改了,还是比较建议多使用include的方式的!


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <android.support.v4.widget.DrawerLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  5.     android:id="@+id/dl_left"  
  6.     android:layout_width="match_parent"  
  7.     android:layout_height="match_parent">  
  8.   
  9.     <!--主布局代码-->  
  10.     <LinearLayout  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="match_parent">  
  13.         <android.support.v7.widget.Toolbar  
  14.             android:id="@+id/toolbar"  
  15.             android:layout_width="match_parent"  
  16.             android:layout_height="?attr/actionBarSize"  
  17.             android:background="@color/material_deep_teal_500"  
  18.             app:popupTheme="@style/toolbarMenuStyle">  
  19.   
  20.             <TextView  
  21.                 android:layout_width="wrap_content"  
  22.                 android:layout_height="wrap_content"  
  23.                 android:layout_gravity="center"  
  24.                 android:text="ToolBar"  
  25.                 android:textColor="@color/toolbar_meun"  
  26.                 android:textSize="24sp"/>  
  27.         </android.support.v7.widget.Toolbar>  
  28.     </LinearLayout>  
  29.   
  30.     <!--侧滑栏布局-->  
  31.     <LinearLayout  
  32.         android:background="@color/material_deep_teal_500"  
  33.         android:layout_width="match_parent"  
  34.         android:layout_gravity="start"  
  35.         android:orientation="vertical"  
  36.         android:layout_height="match_parent">  
  37.         <ImageView  
  38.             android:layout_width="match_parent"  
  39.             android:scaleType="centerCrop"  
  40.             android:src="@mipmap/aa"  
  41.             android:layout_height="150dp"/>  
  42.   
  43.         <LinearLayout  
  44.             android:gravity="center"  
  45.             android:background="@color/window_bg"  
  46.             android:layout_width="match_parent"  
  47.             android:layout_height="match_parent">  
  48.             <TextView  
  49.                 android:text="菜单项"  
  50.                 android:layout_width="wrap_content"  
  51.                 android:textColor="#333"  
  52.                 android:textSize="24dp"  
  53.                 android:layout_height="wrap_content"/>  
  54.         </LinearLayout>  
  55.     </LinearLayout>  
  56. </android.support.v4.widget.DrawerLayout>  
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/dl_left"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--主布局代码-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/material_deep_teal_500"
            app:popupTheme="@style/toolbarMenuStyle">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="ToolBar"
                android:textColor="@color/toolbar_meun"
                android:textSize="24sp"/>
        </android.support.v7.widget.Toolbar>
    </LinearLayout>

    <!--侧滑栏布局-->
    <LinearLayout
        android:background="@color/material_deep_teal_500"
        android:layout_width="match_parent"
        android:layout_gravity="start"
        android:orientation="vertical"
        android:layout_height="match_parent">
        <ImageView
            android:layout_width="match_parent"
            android:scaleType="centerCrop"
            android:src="@mipmap/aa"
            android:layout_height="150dp"/>

        <LinearLayout
            android:gravity="center"
            android:background="@color/window_bg"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:text="菜单项"
                android:layout_width="wrap_content"
                android:textColor="#333"
                android:textSize="24dp"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>

这里一定要注意android:layout_gravity="start"属性的设置! 


下面是整个java类的完整代码

  1. public class MainActivity extends AppCompatActivity {  
  2.   
  3.     private DrawerLayout          mDrawerLayout;  
  4.     private ActionBarDrawerToggle mDrawerToggle;  
  5.     private Toolbar mToolbar;  
  6.   
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.   
  12.         mToolbar = (Toolbar) findViewById(toolbar);  
  13.         mDrawerLayout = (DrawerLayout) findViewById(R.id.dl_left);  
  14.   
  15.         // Logo  
  16.         //toolbar.setLogo(R.mipmap.ic_launcher);  
  17.   
  18.         // 主标题  
  19.         mToolbar.setTitle("");  
  20.   
  21.         // 副标题  
  22.         //toolbar.setSubtitle("Sub Title");  
  23.   
  24.         //设置toolbar  
  25.         setSupportActionBar(mToolbar);  
  26.   
  27.         //左边的小箭头(注意需要在setSupportActionBar(toolbar)之后才有效果)  
  28.         mToolbar.setNavigationIcon(R.mipmap.store_home_tab_index_pre);  
  29.   
  30.         //菜单点击事件(注意需要在setSupportActionBar(toolbar)之后才有效果)  
  31.         mToolbar.setOnMenuItemClickListener(onMenuItemClick);  
  32.   
  33.         //创建返回键,并实现打开关/闭监听  
  34.         mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.open, R.string.close) {  
  35.             @Override  
  36.             public void onDrawerOpened(View drawerView) {  
  37.                 super.onDrawerOpened(drawerView);  
  38.                 //侧滑栏打开  
  39.             }  
  40.             @Override  
  41.             public void onDrawerClosed(View drawerView) {  
  42.                 super.onDrawerClosed(drawerView);  
  43.                 //侧滑栏关闭  
  44.             }  
  45.         };  
  46.   
  47.         //mDrawerToggle.syncState();此处注释掉是为了不使用默认的开关箭头  
  48.   
  49.         //设置侦听  
  50.         mDrawerLayout.addDrawerListener(mDrawerToggle);  
  51.     }  
  52.   
  53.     private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {  
  54.         @Override  
  55.         public boolean onMenuItemClick(MenuItem menuItem) {  
  56.             String msg = "";  
  57.             switch (menuItem.getItemId()) {  
  58.                 case R.id.action_edit:  
  59.                     msg += "Click edit";  
  60.                     break;  
  61.                 case R.id.action_share:  
  62.                     msg += "Click share";  
  63.                     break;  
  64.                 case R.id.action_settings:  
  65.                     msg += "Click setting";  
  66.                     break;  
  67.             }  
  68.   
  69.             if(!msg.equals("")) {  
  70.                 Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();  
  71.             }  
  72.             return true;  
  73.         }  
  74.     };  
  75.   
  76.     @Override  
  77.     public boolean onCreateOptionsMenu(Menu menu) {  
  78.         // 绑定toobar跟menu  
  79.         getMenuInflater().inflate(R.menu.menu_main, menu);  
  80.         return true;  
  81.     }  
  82.   
  83.     @Override  
  84.     protected boolean onPrepareOptionsPanel(View view, Menu menu) {  
  85.         if (menu != null) {  
  86.             if (menu.getClass() == MenuBuilder.class) {  
  87.                 try {  
  88.                     Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);  
  89.                     m.setAccessible(true);  
  90.                     m.invoke(menu, true);  
  91.                 } catch (Exception e) {  
  92.                     e.printStackTrace();  
  93.                 }  
  94.             }  
  95.         }  
  96.         return super.onPrepareOptionsPanel(view, menu);  
  97.     }  
  98. }  
public class MainActivity extends AppCompatActivity {

    private DrawerLayout          mDrawerLayout;
    private ActionBarDrawerToggle mDrawerToggle;
    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mToolbar = (Toolbar) findViewById(toolbar);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.dl_left);

        // Logo
        //toolbar.setLogo(R.mipmap.ic_launcher);

        // 主标题
        mToolbar.setTitle("");

        // 副标题
        //toolbar.setSubtitle("Sub Title");

        //设置toolbar
        setSupportActionBar(mToolbar);

        //左边的小箭头(注意需要在setSupportActionBar(toolbar)之后才有效果)
        mToolbar.setNavigationIcon(R.mipmap.store_home_tab_index_pre);

        //菜单点击事件(注意需要在setSupportActionBar(toolbar)之后才有效果)
        mToolbar.setOnMenuItemClickListener(onMenuItemClick);

        //创建返回键,并实现打开关/闭监听
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.open, R.string.close) {
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                //侧滑栏打开
            }
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                //侧滑栏关闭
            }
        };

        //mDrawerToggle.syncState();此处注释掉是为了不使用默认的开关箭头

        //设置侦听
        mDrawerLayout.addDrawerListener(mDrawerToggle);
    }

    private Toolbar.OnMenuItemClickListener onMenuItemClick = new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            String msg = "";
            switch (menuItem.getItemId()) {
                case R.id.action_edit:
                    msg += "Click edit";
                    break;
                case R.id.action_share:
                    msg += "Click share";
                    break;
                case R.id.action_settings:
                    msg += "Click setting";
                    break;
            }

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 绑定toobar跟menu
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @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);
    }
}

其中ActionBarDrawerToggle是对Toolbar上的开关跟侧滑栏进行关联的!


到这里,我们的toolbar跟侧滑都说了一些 简单的使用,下面看看侧滑栏的图:









注:由于个人android学习的大部分知识都来源于网络,比如说:郭霖、张鸿洋、泡在网上的日子等等大牛的博客,在此写下一些学习笔记,并加入一些个人的理解或者说总结,主要用于个人提升,如有雷同并非巧合^_^



0
0
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab GUI 中 Figure Toolbar 提供了一些方便的工具,可以帮助你查看和处理图像数据。在 Matlab GUI 中,你可以通过以下步骤来使用 Figure Toolbar: 1. 在 GUI 中添加一个图像控件,例如 "axes" 控件。 2. 在 GUI 中添加一个按钮或菜单项,用于打开 Figure Toolbar。 3. 在按钮或菜单项的回调函数中,使用 "figure" 函数来获取当前 Figure 窗口的句柄,然后使用 "uitoolbar" 函数来添加 Figure Toolbar。 下面是一个简单的示例代码,演示了如何在 Matlab GUI 中使用 Figure Toolbar: ```matlab function myGUI % 创建 GUI 窗口和图像控件 hFig = figure('MenuBar','none','ToolBar','none','Position',[100 100 400 300]); hAx = axes('Parent',hFig,'Position',[0.1 0.1 0.8 0.8]); % 创建菜单项和对应的回调函数 hMenu = uimenu('Label','View'); uimenu(hMenu,'Label','Show Toolbar','Callback',@showToolbar); % 回调函数,用于打开 Figure Toolbar function showToolbar(~,~) % 获取当前 Figure 窗口的句柄 hFig = gcf; % 创建 Figure Toolbar hToolbar = uitoolbar(hFig); % 添加放大、缩小、旋转等工具 hZoomIn = uitoolfactory(hToolbar,'Exploration.ZoomIn'); hZoomOut = uitoolfactory(hToolbar,'Exploration.ZoomOut'); hPan = uitoolfactory(hToolbar,'Exploration.Pan'); hRotate = uitoolfactory(hToolbar,'Exploration.Rotate'); % 添加数据光标和数据提示工具 hDataCursor = datacursormode(hFig); hDataTip = uitoolfactory(hToolbar,'Exploration.DataCursor'); % 添加其他自定义工具 % ... % 调整 Figure 窗口大小,以适应 Figure Toolbar pos = get(hFig,'Position'); set(hFig,'Position',[pos(1:2) pos(3:4)+[0 40]]); end end ``` 在这个示例代码中,我们创建了一个简单的 GUI 窗口和一个图像控件。然后,我们添加了一个菜单项 "Show Toolbar",用于打开 Figure Toolbar。在回调函数 "showToolbar" 中,我们使用 "uitoolbar" 函数来创建 Figure Toolbar,并添加了一些常用工具和数据光标、数据提示工具。最后,我们调整了 Figure 窗口的大小,以适应 Figure Toolbar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值