zoukankan      html  css  js  c++  java
  • android中使用toolbar

    系统默认使用的是ActionBar,就是界面中的标题栏,但是由于ActionBar设计的原因,被限定只能位于活动的顶部,从而不能实现Material Design效果,所以官方建议使用Toolbar替换掉ActionBar

    下面来看一下,如果使用Toolbar

    1、首先先去掉默认的ActionBar,修改styles.xml,这个styles.xml是项目自带的,位于src/main/res/values目录下,注意看红色内容为我添加的内容:

    <resources>
    
        <!-- Base application theme. -->
        <style name="AppTheme" 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>
        </style>
    
        <style name="AppTheme2" 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>
    
    </resources>

    AppTheme风格是系统默认的,也就是带ActionBar的

    AppTheme2风格是我添加的,是不带ActionBar的,区别就是把parent属性修改为Theme.AppCompat.Light.NoActionBar

    当然如果整个项目都不需要ActionBar,直接修改默认的AppTheme风格就可以了

    修改AndroidManifest.xml文件,这里我截了图,没有粘代码:

    如果希望整个项目都使用AppTheme2风格,直接按我截图的方式修改即可,如果只是部分Activity,可以专门为指定Activity指定android:theme属性

    2、在Activity活动上添加Toolbar

    添加好toolbar控件,指定好id,然后需要在java代码中注册一下:

    在onCreate方法中添加如下代码:

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

    如果需要不显示标题,并且添加返回按钮,修改上面的代码:

       @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if(item.getItemId()==android.R.id.home) {
                finish();
            } 
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main36);
    
            Toolbar toolbar = findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowTitleEnabled(false);
    
                }
            });
        }

    上面的代码重写了onOptionsItemSelected方法,用于响应返回按钮事件

    3、为Toolbar添加操作按钮

    这个添加按钮其实就是创建 option menu,这个我在之前的文章有讲:Android中创建option menu

    这里我再创建一个,在src/main/res/menu目录下创建menu资源文件menu1.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item
            android:id="@+id/editItem"
            android:icon="@android:drawable/ic_menu_edit"
            android:title="编辑"
            app:showAsAction="always" />
        <item
            android:id="@+id/deleteItem"
            android:icon="@android:drawable/ic_menu_delete"
            android:title="删除"
            app:showAsAction="always" />
        <item
            android:id="@+id/helpItem"
            android:icon="@android:drawable/ic_menu_help"
            android:title="帮助"
            app:showAsAction="always" />
    </menu>

    注意这个app:showAsAction属性,设成always是指显示在标题栏中,设为ifRoom是指空间够就显示在标题栏中,设为never是显示在菜单栏中

    然后在java代码中注册这个菜单,并且响应对应按钮事件,最终代码如下:

    public class Main36Activity extends AppCompatActivity {
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu4,menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if(item.getItemId()==android.R.id.home) {
                finish();
            } else if(item.getItemId()==R.id.editItem) {
                Toast.makeText(Main36Activity.this, "编辑操作", Toast.LENGTH_SHORT).show();
            } else if(item.getItemId()==R.id.deleteItem) {
                Toast.makeText(Main36Activity.this, "删除操作", Toast.LENGTH_SHORT).show();
            } else if(item.getItemId()==R.id.helpItem) {
                Toast.makeText(Main36Activity.this, "帮助操作", Toast.LENGTH_SHORT).show();
            }
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main36);
    
            Toolbar toolbar = findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowTitleEnabled(false);
        }
    }

    展示效果:

  • 相关阅读:
    mysql-centos7部署mysql5.7.20
    tips-history添加命令的执行时间
    Maven核心概述
    Java动态代理
    JDBC(3)-数据库事务
    JDBC(2)-操作BLOB类型字段和批量插入
    redis+mysql读写方案
    Redis与Memcache区别最全整理【摘自百度】
    redis+mysql有几种用法?【摘录知乎】
    js 拷贝到剪贴板
  • 原文地址:https://www.cnblogs.com/modou/p/10298025.html
Copyright © 2011-2022 走看看