版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a8341025123/article/details/52928375
什么是Toolbar?
Toolbar是google在android5.0之后推出的一个 Material Design风格的导航栏,用来取代之前的Actionbar.相比于Actionbar,Toolbar可以很简单的设置图标,主标题,子标题,返回键,菜单栏等按键。Toolbar更多的应用在和其他的Matrial Design组件中,如结合CollapsingToolbarLayout实现动态隐藏Toolbar、结合侧滑菜单栏等。
开发准备
Toolbar是在android.support.v7包中的,所以我们要在Android studio中的build.gradle导入V7包
compile ‘com.android.support:appcompat-v7:24.2.0’
布局文件引入Toolbar
在布局文件中引入Toolbar和引入其他简单组件一样,非常简单,activity_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"
android:id="@+id/activity_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
</android.support.v7.widget.Toolbar>
</LinearLayout>
布局内容和平常的一样,layout_height的值?attr/actionBarSize是actionbar的标准长度
android:background=”?attr/colorPrimary”设置Toolbar背景颜色,值是标准的状态栏背景色蓝色。
app:theme=”@style/ThemeOverlay.AppCompat.Dark.ActionBar”>设置toolbar的样式,也可以不设置。不设置的话标题颜色是黑色,比较难看,一般的状态栏颜色的字体是白色。
注意事项1:使用Toolbar的时候要隐藏掉系统本身的状态栏,这里我在androidmanifest文件中指定了该activity的them是无标题的Theme.AppCompat.Light.NoActionBar样式。你也可以在Activity中用代码去实现隐藏标题栏
代码设置标题、图标、菜单
public class ToolbarActivity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toolbar);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("主标题");
setSupportActionBar(toolbar);
}
}
以上代码也非常简单,只是设置了标题而已,让我们来看看效果
可以看到,一个只设置了主标题的Toolbar,很简陋,但是Toolbar的操作不仅仅这些,我们来添加返回键,菜单栏,副标题,如图。
先呈上layout/menu/toolbar_menu.xml下的菜单布局
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/share"
android:title="ic_share"
android:icon="@drawable/ic_photo_share"
app:showAsAction="ifRoom"
/>
<item
android:id="@+id/item01"
android:title="item01"
app:showAsAction="never"
/>
<item
android:id="@+id/item02"
android:title="item02"
app:showAsAction="never"
/>
</menu>
app:showAsAction设置为ifRoom是将这个按键显示到toolbar中,设置为never则是把这个item隐藏隐藏在最右边的菜单键里
设置副标题,返回键,menu监听器
public class ToolbarActivity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toolbar);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("主标题");
toolbar.setSubtitle("副标题");
toolbar.setLogo(R.mipmap.ic_launcher);
//设置SupportActionBar
setSupportActionBar(toolbar);
//快速设置返回键,返回键的逻辑在下面的onOptionsItemSelected中编写
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//也可以使用toolbar.setNavigationIcon(//图片)定义自己的返回键图片,逻辑还是在onOptionsItemSelected中编写
}
//加载menu下编写好的菜单栏
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu,menu);
return true;
}
//在这里编写菜单的点击监听
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
//android.R.id.home是返回键
case android.R.id.home:
onBackPressed();
break;
case R.id.share:
Toast.makeText(ToolbarActivity.this, "share", Toast.LENGTH_SHORT).show();
break;
case R.id.item01:
Toast.makeText(ToolbarActivity.this, "item01", Toast.LENGTH_SHORT).show();
break;
case R.id.item02:
Toast.makeText(ToolbarActivity.this, "item02", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}