ToolBar基本使用方法

来源:互联网 发布:怎么当淘宝客服 编辑:程序博客网 时间:2024/05/22 16:46
ToolBar是Android Lollipop新增的用于取代ActionBar的一个ViewGroup。之所以退出ToolBar,是因为原有的ActionBar具有相当大的局限性,如:不能随意设置文字的位置,不能添加自定义布局。
想要使用ToolBar,必须在build.gradle中引入如下配置:
dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
}
使用ToolBar之前,必须将应用的主题设置为NoActionBar的。我们可以自定义主题,继承一个NoActionBar的主题,就像下面这样:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
也可以通过在自定义主题的内部添加下面的代码达到去除ActionBar的目的,但父主题必须含有AppCompat:
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
另外我们可以通过添加下面这两句代码分别设置系统状态栏和ToolBar的背景色:
<!-- ToolBar背景色 -->
<item name="colorPrimary">@color/holo_blue_dark</item>
<!-- 系统状态栏背景色 -->
<item name="colorPrimaryDark">@color/holo_blue_dark</item>
具体可用下面这张图解释colorPrimary和colorPrimaryDark,一目了然:


完整的styles.xml:
<style name="AppTheme" parent="Theme.AppCompat">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="colorPrimary">@color/holo_blue_dark</item>
<item name="colorPrimaryDark">@color/holo_blue_dark</item>
 
</style>

接下来在布局文件中用全类名的方式引入ToolBar,尤其要注意的是,在父布局中添加属性
android:fitsSystemWindows="true"
这是为了避免ToolBar和系统状态栏发生重合。

布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
tools:context="com.egotrip.wcc.ui.ToolBarActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"/>
</LinearLayout>
其中ToolBar的高通过属性actionBarSize设置,通过android:background="?attr/colorPrimary"设置ToolBar的背景颜色。

Activity中通过下面两行代码设置ToolBar:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
完整的Activity:
package com.egotrip.wcc.ui;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
 
import com.egotrip.wcc.R;
 
public class ToolBarActivity extends AppCompatActivity {
 
private MenuItem mMenuItem;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tool_bar);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
 
toolbar.setTitle("ToolBar");
// toolbar.inflateMenu(R.menu.menu_main);
toolbar.setNavigationIcon(android.R.drawable.ic_input_delete);
 
}
 
@Override
public boolean onCreateOptionsMenu(Menu menu){
 
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_main, menu);
mMenuItem = menu.findItem(R.id.action_settings);
mMenuItem.setTitle("settings");
 
return super.onCreateOptionsMenu(menu);
}
 
}
运行截图:

想改变背景颜色,比如白色,可以在styles.xml中做如下修改:
<style name="AppTheme" parent="Theme.AppCompat.Light">
运行截图:

我们可以通过下面的代码,给ToolBar添加NavigationIcon(也就是上图的),主副标题以及Logo:
//此句和下面一句代码合起来实现主标题的设置,若没有这句,则系统会用默认标题代替主标题
getSupportActionBar().setDisplayShowTitleEnabled(false);
toolbar.setTitle("主标题");
toolbar.setSubtitle("副标题");//设置副标题
toolbar.setLogo(R.drawable.lena);//设置LOGO
toolbar.setNavigationIcon(android.R.drawable.ic_input_delete);//设置NavigationIcon
//给NavigationIcon添加点击事件
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtils.showToast("退出", CardRecyclerViewActivity.this);
finish();
}
});

运行截图:


给ToolBar添加菜单,分两种情况:

1、Activity中调用了下面的方法:
setSupportActionBar(toolbar);
此时需要复写下面的方法为ToolBar添加菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu){
 
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_main, menu);
mMenuItem = menu.findItem(R.id.action_settings);
mMenuItem.setTitle("settings");
 
return super.onCreateOptionsMenu(menu);
}
2、Activity中没有调用该方法:
此时需要通过下面的代码为ToolBar添加菜单
toolbar.inflateMenu(R.menu.menu_main);
具体的菜单布局文件/res/menu/menu_main.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=".ui.MainActivity">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
android:icon="@android:drawable/star_big_on"
app:showAsAction="never"/>
</menu>
为菜单添加点击事件:
toolbar.setOnMenuItemClickListener(this);
public class ToolBarActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener
@Override
public boolean onMenuItemClick(MenuItem item) {
 
switch (item.getItemId())
{
case R.id.action_settings:
ToastUtils.showToast("设置", this);
break;
}
return false;
}


0 0
原创粉丝点击