您的位置:首页 > 移动开发 > Android开发

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

2015-12-15 10:09 543 查看
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文件内容。

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







可以将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));

这样,很多界面就都可以使用这个标题布局了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: