Toolbar的使用

前言

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值