Toolbar的使用,替代了actionbar
Toolbar是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与 Actionbar 相比,Toolbar 明显要灵活的多。它不像 Actionbar 一样,一定要固定在Activity的顶部,而是可以放到界面的任意位置。除此之外,在设计 Toolbar 的时候,Google也留给了开发者很多可定制修改的余地,这些可定制修改的属性在API文档中都有详细介绍,如:
- 设置导航栏图标;
- 设置App的logo;
- 支持设置标题和子标题;
- 支持添加一个或多个的自定义控件;
- 支持Action Menu;
import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; /** * 注意:用android.support.v7.widget.Toolbar替换ActionBar,所以需要隐藏原有的标题头: 方法1.设置App主题为:Theme.AppCompat.Light.NoActionBar 方法2. supportRequestWindowFeature(Window.FEATURE_NO_TITLE)去掉了默认的导航栏(如果是继承了AppCompatActivity的, 如果是继承Activity就应该调用 requestWindowFeature(Window.FEATURE_NO_TITLE) ) */ public class MainActivity extends AppCompatActivity { private Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); //也可以在布局中设置这些属性,具体见布局文件 toolbar.setNavigationIcon(R.mipmap.ic_launcher);//设置最左侧图标 //toolbar.setLogo(R.mipmap.ic_launcher);//设置程序logo图标 toolbar.setTitle("toolbar标题");//需要在替换actionbar之前设置,否则显示不了 toolbar.setSubtitle("子标题"); toolbar.setTitleTextColor(Color.parseColor("#ff0000"));//设置标题的字体颜色 toolbar.setSubtitleTextColor(Color.parseColor("#00ff00"));//设置子标题的字体颜色 setSupportActionBar(toolbar); //取代原本的actionbar,继承activity可以不设置,如果不替换,菜单显示不出来 //单击事件需要在setSupportActionBar方法后,因为原本的actionbar也有这个单击事件 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "点击了最左边的图标", Toast.LENGTH_SHORT).show(); } }); toolbar.inflateMenu(R.menu.main_menu);//设置toolbar右边的菜单项 //设置toolbar中菜单项中的点击事件 toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()){ case R.id.menu1: Toast.makeText(MainActivity.this, "点击了菜单1", Toast.LENGTH_SHORT).show(); break; case R.id.menu2: Toast.makeText(MainActivity.this, "点击了菜单2", Toast.LENGTH_SHORT).show(); break; case R.id.menu3: Toast.makeText(MainActivity.this, "点击了菜单3", Toast.LENGTH_SHORT).show(); break; case R.id.menu4: Toast.makeText(MainActivity.this, "点击了菜单4", Toast.LENGTH_SHORT).show(); break; } return false; } }); //为自定义的控件设置单击事件 toolbar.findViewById(R.id.myText).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "点击了自己的文本", Toast.LENGTH_SHORT).show(); } }); } /** * 如果是继承的AppCompatActivity,取代了原有的actionbar,需要手动的将toolbar中的菜单设置上来 */ @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main_menu,menu);//将toolbar中的菜单添加上来,不然不会显示菜单 return true; } }
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".MainActivity"> <!--位置可以任意,可以插入布局和在代码中插入菜单 如果是在布局中设置标题和图标,切记引进一个命名空间,然后在该命名空间下设置属性--> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:background="#ffcccc" android:titleTextColor="#000000" android:subtitleTextColor="#ff0000" app:navigationIcon="@mipmap/ic_launcher" app:logo="@mipmap/ic_launcher" app:subtitle="子标题" app:title="标题" android:layout_width="match_parent" android:layout_height="wrap_content"> <!--可以插入布局,将Toolbar当做ViewGroup使用就行 自定义的View位于标题和菜单之间--> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/myText" android:text="MyText" android:textSize="20sp" android:gravity="center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </android.support.v7.widget.Toolbar> </RelativeLayout>
菜单文件main_menu.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"> <!--作为Toolbar的菜单--> <item android:id="@+id/menu1" android:title="菜单1" android:icon="@mipmap/ic_launcher" app:showAsAction="ifRoom"/> <item android:id="@+id/menu2" android:title="菜单2" android:icon="@mipmap/ic_launcher" app:showAsAction="ifRoom"/> <item android:id="@+id/menu3" android:title="菜单3" android:icon="@mipmap/ic_launcher" app:showAsAction="never"/> <item android:id="@+id/menu4" android:title="菜单4" android:icon="@mipmap/ic_launcher" app:showAsAction="never"/> </menu>
效果图: