在Android Studio中默认工程继承AppCompatActivity而不是Activity。
从AppCompatActivity的源码中可以看到,它是继承自FragmentActivity的而它的另一个作用是代替了过时的ActionBarActivity,即用Toolbar代替ActionBar。接下来就介绍一下Toolbar的使用。
导入依赖包
compile ‘com.android.support:appcompat-v7:24.1.1’
.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tool"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
.support.design.widget.AppBarLayout>
1.设置标题
setTitle("title");
setSupportActionBar(toolbar);
默认标题是靠右对齐,如果要居中或对标题样式有特殊需求可以在xml中的Toolbar标签中加入并配置其属性
2.设置返回按钮
tool.setNavigationIcon(R.mipmap.back);
tool.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(getWindow().getDecorView(),"back",Snackbar.LENGTH_SHORT).show();
}
});
3.设置logo
tool.setLogo(R.mipmap.logo);
4.设置副标题
tool.setSubtitle("subtitle");
设置完以上参数的样式如下
1.menu基本设置
在代码中设置获取menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.food_type_menu,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//各个item点击事件
return true;
}
在menu中设置menu样式
其中showAsAction属性共有五个值:ifRoom、never、always、withText、collapseActionView,可以混合使用。
ifRoom 会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。当然个数并不仅仅局限于4个,依据屏幕的宽窄而定
never 永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义item的时候,最好把标题都带上。
always 无论是否溢出,总会显示。
withText withText值示意Action bar要显示文本标题。Action bar会尽可能的显示这个标题,但是,如果图标有效并且受到Action bar空间的限制,文本标题有可能显示不全。
collapseActionView 声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要占据操作栏的有效空间。
一般要配合ifRoom一起使用才会有效果。
最终效果
2.menu样式
默认的样式是白底黑字,可以通过设置Toolbar中的theme来改变样式
<style name="MenuStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">#ffffffitem>
style>
以上两个parent,ThemeOverlay.AppCompat.Light为白色背景ThemeOverlay.AppCompat.Dark.ActionBar为黑色背景,android:textColorPrimary设置字体颜色
3.PopupMenu
PopupMenu是一个轻量话的控件,与PopupWindow相比少了很多自定义的属性,这里我将PopupWindow作为一个Menu的展开来使用
PopupMenu popup=new PopupMenu(this,findViewById(R.id.menu_group));
popup.getMenuInflater().inflate(R.menu.food_type_menu_item,popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.item1:
ToastUtil.showToast(FoodTypeActivity.this,"item1");
break;
case R.id.item2:
ToastUtil.showToast(FoodTypeActivity.this,"item2");
break;
}
return true;
}
});
popup.show();
如果需要改变PopupMenu的字体颜色和背景颜色就需要在该window对应的Activity中改变它的style
在AndroidManifest中设置style
<activity android:name=".view.FoodTypeActivity" android:theme="@style/PpupmenuStyle"/>
默认PopupMenu是只显示title不显示icon的,可以自己重写PopupMenu并修改相关属性来使之显示icon
try {
Field field = popup.getClass().getDeclaredField("mPopup");
field.setAccessible(true);
MenuPopupHelper mHelper = (MenuPopupHelper) field.get(popup);
mHelper.setForceShowIcon(true);
} catch (Exception e) {
e.printStackTrace();
}
以上就是关于Toolbar的一些东西,虽然常用的都是自定义的title,但还是有必要了解一下官方给的方案。