前言
先让我感慨一波,步入公司,就觉得自己真的是荒度了青春啊,好多东西要学,好多东西要看,时间真是公平的,浪费的迟早要还回来的;言归正传,这是我的第一篇博客,也是第一次发表这种博客,为自己打个良好的开端,写的不好多多见谅!以下只是我的个人学习心得,要是有想一起学习的小伙伴,欢迎关注与交流~~
ToolBar与ActionBar的渊源
ToolBar与我们之前写过的ActionBar看起来貌似没有什么两样,但为什么要学习ToolBar而不使用ActionBar呢?首先ActionBar由于其设计的原因,被限定只能位于活动的顶部,从而不能实现一些Material Design的效果,所以官方现在已经不建议使用ActionBar了;而ToolBar不仅继承了ActionBar的所有功能,而且可以配合其他控件来完成一些Material Design的效果,具体看下文;
ToolBar的使用
首先在AndroidManifest.xml中看到android:theme="@style/AppTheme"> 此时的主题是在styles文件中的名为AppTheme的主题。进入styles.xml文件中看到:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
各个位置的设置请看:
这个主题的父类路径是Theme.AppCompat.Light.DarkActionBar,其实这是一个actionbar,所以要想改成toolbar,就把其改为:Theme.AppCompat.Light.NoActionBar这时我们将ActionBar隐藏起来了,接下来就要显示ToolBar界面了。修改layout文件,如下:
<?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: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"
android:theme="@style/ThemeOverlay.AppCompat.Dark.Actionbar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</LinearLayout>
其中主要是中间的那一部分,我们挨着解释:
首先看第二行,这里使用了xmln:app这个新的命名方式,我们正是用了xmlns:android这个命名来制定空间,所以我们才能用android:id,android:layout_high等写法,所以指定xmlns:app就是可以使用app:attribute这样的写法。接下来定义了一个ToolBar控件,这个控件由v7库提供,?attr意思是在style中定义的属性。这个写完之后修改Activity中的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
mToolBar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolBar);
}
setSupportActionBar这个方法作用是将ToolBar的实例传入,它现在就是一个ToolBar,具备实现Material Design效果的能力。修改标题在AndriodManifest.xml中指定:android:label= “xxx”;
添加action按钮:
创建menu文件夹,再new Menu resource file,创建一个.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/insert"
android:icon="@drawable/insert" //图标
android:title="insert" //文字
app:showAsAction="always" />
<item
android:id="@+id/fill"
android:icon="@drawable/fill"
android:title="fill"
app:showAsAction="ifRoom" />
<item
android:id="@+id/mswitch"
android:icon="@drawable/mswitch"
android:title="mySwitch"
app:showAsAction="never" />
</menu>
通过item标签来定义action按钮,showAsAction指定按钮的位置,之所以使用app命名空间,主要是为了兼容低版本的系统。
showAsAction主要有以下几种值:always表示永远显示在ToolBar中,如果屏幕不够不显示;ifRoom表示屏幕空间够用的时候才显示;never表示一直显示在菜单当中。菜单中的action按钮要显示图标的话,要用withtext(放在app:showAsAction)
修改Toolbar popup menu 弹出位置
我们可以看到,popup menu的位置是过于偏上的,我们还可以修改它的位置,使它处于Toolbar之下,这样看起来可能更美观:
修改styles.xml文件如下:
<!-- toolbar弹出菜单样式 -->
<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark">
<item name="android:colorBackground">@color/colorPrimary</item> //改背景色
<item name="actionOverflowMenuStyle">@style/OverflowMenuStyle</item> //添加一个item控制menu
</style>
<style name="OverflowMenuStyle" parent="Widget.AppCompat.Light.PopupMenu.Overflow">
<item name="overlapAnchor">false</item> <!--把该属性改为false即可使menu位置位于toolbar之下-->
</style>
主活动中点击事件的添加
//将你自定义的action载入到view中
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar, menu);
// mToolBar.setNavigationIcon(R.mipmap.new_left);
return true;
}
//点击事件实现
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.fill:
Toast.makeText(MainActivity.this, "You clicked fill",
Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
到此为止ToolBar的使用就结束了,欢迎大佬们来批评指导哟~~
android第一行代码 郭霖著