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>

效果图:

 

posted @ 2016-10-06 13:57  ts-android  阅读(974)  评论(0编辑  收藏  举报