学而实习之 不亦乐乎

Android:ToolBar 使用

2020-10-07 20:41:25

一、简介

ToolBar是Android 5.0推出的一个新的导航控件用于取代之前的ActionBar,由于其高度的可定制性、灵活性、具有Material Design风格等优点,越来越多的应用也用上了ToolBar,比如常用的知乎软件其顶部导航栏正是使用ToolBar。官方考虑到仍有一部分用户的手机版本号低于5.0,所以,ToolBar也放进了support v7包内,使得低版本的系统也能使用上ToolBar。

二、使用基本流程

1.引入包

compile 'com.android.support:appcompat-v7:23.1.1'

2.修改主题

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"></style>

3.布局

ToolBar 与ActionBar 最大的不同在于 ToolBar 实际上是一个ViewGroup,支持在其内部放入子View。如下:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="标题"
            android:textSize="20sp"/>
    </android.support.v7.widget.Toolbar>
</FrameLayout>

4.在 Activity 中加载 ToolBar

setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

5.添加点击事件处理

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            break;
        case R.id.action_search:
            break;
        case R.id.action_share:
            break;
    }
    return true;
}

三、使用技巧

1.添加title、subtitle、logo、导航栏图标

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.setTitle("Title");
        toolbar.setSubtitle("SubTitle");
        toolbar.setLogo(R.mipmap.ic_launcher);
        
        //设置导航图标要在setSupportActionBar方法之后
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.mipmap.ic_drawer_home);
    }
    
    //监听返回按键及 menu 事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.home:
                break;
            case R.id.action_settings:
                break;
            case R.id.action_search:
                break;
            case R.id.action_share:
                break;
        }
        return true;
    }

}