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

来源:互联网 发布:java类库手册 pdf 编辑:程序博客网 时间:2024/06/01 10:32

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

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

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

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

<android.support.v7.widget.Toolbar    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文件中加入如下代码:

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

这样就可以基本运行了。

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

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

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

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


可以将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布局如下:

<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="com.example.cnlive.recyclerview.MainActivity">    <item        android:id="@+id/home_live"        android:orderInCategory="100"        android:title="@string/action_settings"        app:showAsAction="ifRoom"        android:icon="@drawable/home_live_sel"/>    <item        android:id="@+id/btn_grade"        android:orderInCategory="100"        android:title="@string/action_settings"        app:showAsAction="ifRoom"        android:icon="@drawable/btn_grade_sel"/>    <item        android:id="@+id/btn_like"        android:orderInCategory="100"        android:title="@string/action_settings"        app:showAsAction="ifRoom"        android:icon="@drawable/btn_like_sel"/></menu>
   其中,每一个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"?><android.support.v7.widget.Toolbar 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">    <TextView        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="标题"/></android.support.v7.widget.Toolbar>
在这个页面中,只放入一个TextView实现这个标题,当然同时也可以加入返回按钮之类的,这些都可以自己添加。然后在需要标题的Activity的xml的布局中引入这个布局就好。

<include 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));
这样,很多界面就都可以使用这个标题布局了。





1 0