Android v7 Toolbar的使用

Android:Toolbar

  • AndroidToolbar
    • 官方文档
    • Overview
    • layout布局
    • Manifest Theme
    • Java
    • 相关的类
    • 相关方法
    • 待更新

官方文档

http://developer.android.com/intl/zh-cn/reference/android/support/v7/widget/Toolbar.html


Overview

v7下的 android.support.v7.widget.Toolbar ,与传统的ActionBar相比,ActionBar是由布局控制的不透明组件,Toolbar能够被放在内容区域的任何位置,想要使用Toolbar,则在 AppCompatActivity 中使用 setSupportActionbar() 方法则可以。

Toolbar提供了更多特性:

  • navigation button:导航按钮
  • logo:logo图标和描述
  • title 和 subtitle:标题和子标题
  • custom views:子view
  • action menu:菜单

layout布局

<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" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/id_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/primary_color"
        android:elevation="3dp"
        android:minHeight="64dp"
 tools:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
RelativeLayout>
  • android:elevation:表示阴影,在material design中View的位置由x,y确定,而现在新增了z轴方向,z的值就是view的高度(elevation),高度决定了阴影。

  • tools:popupTheme:用于设置Toolbar的主题,新版本22.1.x中,AppCompat 允许对 Toolbar 使用android:theme代替tool:theme,它会自动继承父视图的theme ,并且兼容所有APIv11以上的设备。

  • ThemeOverlay:Android 5.0引入一个全新的特性,允许你对view设置theme,这种设置会影响控件及其包含的子控件。使用AppCompat v22.1.x 后,也可以给你 layout 里的任意视图设置主题。该种实现主要是通过 ContextThemeWrapper (API v1)类包裹(wrap)了context,也就是你的Activity,通过覆盖(overlay)一个新的主题在当前Context的主题之上。这就是ThemeOverlay的命名吧。


Manifest Theme

因为使用了Toolbar替换我们的ActionBar,所以我们需要设置我们的应用的Theme:

<style name="AppTheme" parent="AppTheme.Parent" />

<style name="AppTheme.Parent" parent="Theme.AppCompat">
        --设置让toolbar重叠在Actionbar-->
        <item name="android:windowActionModeOverlay">trueitem>   
        <item name="windowActionModeOverlay">trueitem>
        <item name="android:windowActionBarOverlay">trueitem>
        <item name="windowActionBarOverlay">trueitem>
        <item name="windowNoTitle">trueitem>
        <item name="windowActionBar">falseitem>
style>

在我们的AndroidManifest.xml中为 applicationactivity 指定 android:theme="@style/AppTheme"


Java

public class MainActivity extends AppCompatActivity {

    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mToolbar = (Toolbar) findViewById(R.id.id_toolbar);
        if(mToolbar != null){
            setSupportActionBar(mToolbar);
        }
    }
}

相关的类

class Toolbar.LayoutParams
Toolbar子view的布局信息
interface Toolbar.OnMenuItemClickListener
用于设置菜单按钮点击的事件监听器

相关方法

  • 添加MenuinflateMenu(int)

传入R.menu.menu_main菜单文件id参数,能够生成对应的菜单:

<menu 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"
    tools:context=".MainActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_exit"
        android:orderInCategory="100"
        android:title="@string/action_exit"
        app:showAsAction="never" />
menu>

设置按钮的响应事件:

mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem menuItem) {
                    int id = menuItem.getItemId();
                    if (id == R.id.action_settings) {

                    } else if(id == R.id.action_exit) {
                        finishActivty();
                    }
                    return false;
                }
            });
        }
  • 添加返回按钮setDisplayHomeAsUpEnabled(boolean)
//添加返回按钮
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

//返回按钮添加点击响应时间
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});

待更新…

你可能感兴趣的:(Android)