Toolbar的使用

来源:互联网 发布:js替换所有字符串 编辑:程序博客网 时间:2024/06/05 17:39

前言

在Android Studio中默认工程继承AppCompatActivity而不是Activity。
AppCompatActivity
从AppCompatActivity的源码中可以看到,它是继承自FragmentActivity的而它的另一个作用是代替了过时的ActionBarActivity,即用Toolbar代替ActionBar。接下来就介绍一下Toolbar的使用。

导入依赖包
compile ‘com.android.support:appcompat-v7:24.1.1’

xml中设置

<android.support.design.widget.AppBarLayout    android:layout_width="match_parent"    android:layout_height="wrap_content">    <android.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"/></android.support.design.widget.AppBarLayout>

在Activity中设置Toolbar

基本设置

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样式

 <menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    >    <item        android:id="@+id/menu_group"        android:title="item1"        android:icon="@mipmap/ic_launcher"        app:showAsAction="always" />    <item        android:id="@+id/menu_clear"        android:title="item1"        app:showAsAction="never" />    <item        android:id="@+id/menu_refresh"        android:title="item2"        app:showAsAction="never" /></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.Light">--><style name="MenuStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">    <item name="android:textColorPrimary">#ffffff</item></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

<style name="PpupmenuStyle" parent="@style/AppTheme">    <item name="android:textColorPrimary">#ffffff</item>    <item name="android:colorBackground">#000000</item></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,但还是有必要了解一下官方给的方案。

0 0
原创粉丝点击