您现在的位置是:首页 > 文章详情

Toolbar的简单使用

日期:2018-08-12点击:543

Toolbar(android.support.v7.widget.Toolbar)是Android5.0之后出现的用来取代ActionBar的一个控件。

Toolbar的使用方法

●最简单的使用

xml布局
<android.support.v7.widget.Toolbar android:layout_width="match_parent" android:id="@+id/toolbar" app:popupTheme="@style/toolbarMenuStyle" android:layout_height="?attr/actionBarSize"> </android.support.v7.widget.Toolbar> 
除了在布局文件中加入Toolbar外还需要修改values/styles.xml文件
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="windowNoTitle">true</item> //设置没有表态 <item name="windowActionBar">false</item> //没有ActionBar <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> 
Activity代码
public class MainActivity extends AppCompatActivity { private TextView textView; private Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = findViewById(R.id.toolbar); // 设置标题 toolbar.setTitle("我是标题"); // textView.setText("我是标题"); setSupportActionBar(toolbar); // 设置左边图片,这里设置成返回的图标 toolbar.setNavigationIcon(R.drawable.ic_back); // 设置左边图片的点击事件 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } } 
img_86de48c9a60d0b8e02d43d5d7f8d9f94.gif
我们发现这时的Toolbar没有底部分割线很是难看,所以接下来可以为它加上一条底部分界线。
在drawable文件夹中新建toolbarline.xml文件
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="90" android:startColor="@android:color/transparent" android:endColor="#FFC2C0C0"> </gradient> </shape> 
然后在布局文件中添加一个充当底部分割线的View
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" tools:context=".MainActivity"> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:id="@+id/toolbar" app:popupTheme="@style/toolbarMenuStyle" android:layout_height="?attr/actionBarSize"> </android.support.v7.widget.Toolbar> <View android:layout_width="match_parent" android:background="@drawable/shadown" android:layout_below="@id/toolbar" android:layout_height="4dp"/> </RelativeLayout> 
img_05aa51f860d382178e0f9ed3fa0bd2f2.png

●自定义Toolbar布局

由于Toolbar的标题只能靠左,而在开发过程中我们可能会需要让标题居中,这就需要我们对Toolbar进行一些自定义设置,其实很简单只需要在Toolbar内加入一个TextView即可。
 <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:id="@+id/toolbar" app:popupTheme="@style/toolbarMenuStyle" android:layout_height="?attr/actionBarSize"> <TextView android:layout_width="wrap_content" android:textColor="#494848" android:layout_gravity="center" //想要居中需要设置成center android:id="@+id/toobar_title" android:textSize="18sp" android:layout_height="wrap_content" /> </android.support.v7.widget.Toolbar> 
然后需要将Toolbar本身的标题设置为空
 textView = findViewById(R.id.toobar_title); // 设置标题 toolbar.setTitle(""); textView.setText("我是标题"); 
img_9ee3c8b3d58092efbf920637999e9a18.png

●为Toolbar设置菜单,这里分为以下两个步骤

1)设置菜单布局,在res文件夹下新建menu文件夹,并在menu文件夹中新建toolbarmenu.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/setting"// android:title="设置" app:showAsAction="never" //这个是控制菜单项的显示的 //always:设置这个值会让所有菜单项都会显示在toolbar上 //ifRoom:设置这个值之后,如果toolbar上还有空间的话就会显示优先级高的菜单项在toolbar上,剩下的才显示在弹出的列表中 //never:永远不会显示在Toolbar上,只会在溢出列表中出现 //collapseActionView:这个属性通俗的说就是声明某一个菜单项单独显示在toolbar上,而不是显示在打开的菜单中,一般配合ifRoom使用 android:orderInCategory="20" //菜单项的优先级,数值越小越靠前 android:icon="@drawable/ic_sett" //这个属性是指定每个菜单项左边的图标的 /> <item android:id="@+id/about" android:title="关于" app:showAsAction="never" android:orderInCategory="10" android:icon="@drawable/ic_about"/> </menu> 
2)在Activity中为Toolbar添加菜单并且设置点击事件
public class MainActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener{ private TextView textView; private Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = findViewById(R.id.toolbar); textView = findViewById(R.id.toobar_title); // 设置标题 toolbar.setTitle(""); textView.setText("我是标题"); toolbar.setNavigationIcon(R.drawable.ic_back); setSupportActionBar(toolbar); // 设置左边图片,这里设置成返回的图标 // 设置左边图片的点击事件 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); //设置菜单点击事件 toolbar.setOnMenuItemClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // 绑定toobar跟menu getMenuInflater().inflate(R.menu.toolbar_menu, menu); return true; } @Override public boolean onMenuItemClick(MenuItem menuItem) { String msg = ""; switch (menuItem.getItemId()) { case R.id.setting: msg += "设置"; break; case R.id.about: msg += "关于"; break; } if(!msg.equals("")) { Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } return true; } } 
img_aab504f0700a1a1d67a0f506e88c4aeb.gif
这样基本的菜单效果就实现了,不过我们发现菜单左边的图标没有显示出来,而且菜单覆盖了Toolbar很不好看,那么接下来我们就对菜单进行一些配置。
1)让菜单显示左边图标,需要我们在Activity中重写一个方法。
@SuppressLint("RestrictedApi") @Override protected boolean onPrepareOptionsPanel(View view, Menu menu) { if (menu != null) { if (menu.getClass() == MenuBuilder.class) { try { Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (Exception e) { e.printStackTrace(); } } } return super.onPrepareOptionsPanel(view, menu); } 
img_33c0228e896b6b1f1cd087f7bb4d54ea.gif
2)设置菜单不覆盖Toolbar,需要我们对values/styles.xml进行设置
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!--指定toolbar弹出菜单样式--> <item name="actionOverflowMenuStyle">@style/toolbarMenuStyle</item> </style> <!--自定义toolbar菜单样式--> <style name="toolbarMenuStyle" parent="@style/Widget.AppCompat.PopupMenu.Overflow"> <!-- 是否覆盖锚点,默认为true,即盖住Toolbar --> <item name="overlapAnchor">false</item> <!-- 弹出层背景颜色 --> <item name="android:popupBackground">@color/toolbar_meun_bg</item> <!-- 弹出层垂直方向上的偏移,负值会覆盖toolbar --> <item name="android:dropDownVerticalOffset">8dp</item> <!-- 弹出层水平方向上的偏移,即距离屏幕左边的距离,负值会导致右边出现空隙 --> <item name="android:dropDownHorizontalOffset">-2dp</item> <!--文字颜色--> <item name="android:textColor">@color/toolbar_meun</item> </style> </resources> 
img_6f2949ecfd5b6de1c34379423d5e891c.gif
最后再补充下如何覆盖系统菜单按钮图标,需要修改values/styles.xml文件
 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!--指定toolbar弹出菜单样式--> <item name="actionOverflowMenuStyle">@style/toolbarMenuStyle</item> <item name="android:actionOverflowButtonStyle">@style/OverflowButtonStyle</item> //覆盖系统默认菜单按钮图标 </style> <style name="OverflowButtonStyle" parent="@android:style/Widget.ActionButton.Overflow"> <item name="android:src">@drawable/ic_fensi</item> </style> 
img_62946823005318d6d4deee4bf650dbd2.gif

个人博客:https://myml666.github.io

原文链接:https://yq.aliyun.com/articles/665562
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章