在Android studio的一个新建的Activity中添加Toolbar以及相应的功能添加

Toobar一般用在实现一个APP的很多页面的标题的时候会用到,实现的方法也有很多种。

注意:Toolbar需要在工程中引入appcompat-v7的兼容包,需要使用android.support.v7.widget.Toolbar进行开发。

一.单纯的在一个Activity中添加一个Toolbar,就是用这一次,可以通过以下步骤。

1.在Activity的xml布局文件中添加如下代码:

    android:id="@+id/toolbarbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:navigationIcon="?attr/homeAsUpIndicator"/>
用于引入ToolBar后两句分别用于设置背景以及返回按钮。

2.在Java文件中加入如下代码:

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

用于对Toolbar的声明,并且同时代替Actionbar的使用。

3.在Manifast.xml文件中加入如下代码:

    android:name=".ContentActivity"
    android:theme="@style/AppTheme.NoActionBar">

这样就可以基本运行了。

提示:如果只是希望单纯的显示Toolbar的话,可以实现上面步骤。如果还需要添加其他的控件的话,最好是单独写一个Toolbar,然后引入(include),这样比较方便。比如:

    android:id="@+id/toolbar"
    layout="@layout/back_actionbar" />

back_actionbar就是上面第一条的xml文件内容。

当然,单纯的添加一个Toolbar是不够的:还得进行更多功能的添加。

在Android studio的一个新建的Activity中添加Toolbar以及相应的功能添加_第1张图片在Android studio的一个新建的Activity中添加Toolbar以及相应的功能添加_第2张图片在Android studio的一个新建的Activity中添加Toolbar以及相应的功能添加_第3张图片

可以将Toobar做成如图所示样子。接下来我们一一实现。

从左到右依次是 up button的图标,主标题和副标题,以及标题栏按钮(用于点击,编辑等功能)。代码如下:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("MyApp");//设置主标题名称
toolbar.setSubtitle("电影");//设置副标题名称
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.back);//设置up button的按钮
其中toolbar.setNavigatonIcon(R.drawable.back);必须加在setSupportActionBar();之后才会有效。否则会出现返回按钮,而不是你设置的图片。如果再加入
toolbar.setLogo(R.drawable.ic_launcher);

这句代码,用于设置这个APP的图标,加上之后会在图中的返回按钮跟主副标题之间出现这个图片,这里我没有加,有兴趣的可以试一试。

接下来实现右边的三个按钮,这里需要用到menu菜单,首先,在menu目录下建立一个menu_main.xml文件(名字可以自己起),然后xml布局如下:

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="com.example.cnlive.recyclerview.MainActivity">
            android:id="@+id/home_live"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="ifRoom"
        android:icon="@drawable/home_live_sel"/>
            android:id="@+id/btn_grade"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="ifRoom"
        android:icon="@drawable/btn_grade_sel"/>
            android:id="@+id/btn_like"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="ifRoom"
        android:icon="@drawable/btn_like_sel"/>
   其中,每一个item是一个如图右边的按钮,这里设置了三个,可以根据需要进行设置。来说说其中的属性。两个属性需要说一下,orderInCategory设置的是优先级,值越大,优先级越小。showAsAction用于设置这个图标是否显示在Toolbar上,有四个值。always:这个值会使菜单项一直显示在Toolbar上。ifRoom:如果有足够的空间,这个值会使菜单项显示在Toolbar上。never:这个值使菜单项永远都不出现在Toolbar上。withText:这个值使菜单项和它的图标,菜单文本一起显示。而如果都想显示,但是Toolbar上空间不足时,这时候优先级就用于判断究竟谁应该显示在Toolbar上,优先级高的显示,优先级低的就在overflow中隐藏起来。

然后需要在onCreateOptionsMenu()方法中将这个菜单视图显示出来:

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

然后,我么需要给这些按钮添加点击事件,在OnCreate()中的setSupportActionBar()之后进行设置下面代码:

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        String msg = "";
        switch (item.getItemId()) {
            case R.id.home_live:
                msg = "您已经点播!";
                break;
            case R.id.btn_grade:
                msg = "您已经编辑!";
                break;
            case R.id.btn_like:
                msg = "您已经收藏!";
                break;
        }
        Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        return true;
    }
});
用到了setOnMenuItemClickListener()方法,进而根据按钮不同的id进行不同的操作。

注意:setOnMenuItemClickListener()方法也需要添加到setSupportActionBar();之后才会有效。

最后,经过toolbar.setNavigatonIcon(R.drawable.back);设置的up button也可以进行相应的点击事件操作。

如果希望返回按钮能够出现点击返回上一层的功能,则需要在onOptionsItemSelected函数中添加如下代码:

如果不需要返回上一层的按钮,则不需要下面这一步。

public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId()==android.R.id.home){
            finish();
    }
    return super.onOptionsItemSelected(item);
}

up button的id为android.R.id.home,可以在判断id之后加入相应的代码进行跳转等功能。我在这里加finish(),用于退出返回上一页。

二.如果想写一个Toolbar作为每个Activity页面的标题,其余的页面都可以复用这一个作为自己的标题的话,可以通过以下步骤实现:

1.新建一个xml文件,加入如下代码:

xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@color/lightcoral">


            android:id="@+id/toolbar_title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:maxLines="1"
        android:textColor="@android:color/black"
        android:textSize="16sp"
        tools:text="标题"/>

在这个页面中,只放入一个TextView实现这个标题,当然同时也可以加入返回按钮之类的,这些都可以自己添加。然后在需要标题的Activity的xml的布局中引入这个布局就好。

android:id="@+id/toolbar"
    layout="@layout/title_main" />
同时,在Manifest.xml文件中将这个Activity的theme属性修改成没有Actionbar的

android:theme="@style/AppTheme.NoActionBar"
然后,就可以通过这个TextView的id在代码中修改标题的内容,颜色等属性,可在onCreate()中加入。

if(title!=null){
 title.setText("心动应用");
    title.setTextColor(this.getResources().getColor(R.color.white));
这样,很多界面就都可以使用这个标题布局了。





你可能感兴趣的:(Android高阶)