toolbar头部(相同的头部使用include引用)

最火开源框架MVVMhabit
一. 准备工作
二. 快速上手

三. 数据绑定

  1. TextView绑定
  2. onClick绑定
  3. ImageView绑定
  4. ListView绑定
  5. RecyclerView绑定

四. 其他

  1. toolbar头部标题
  2. 底部tabBar第三方按钮

在Android中很多重复的布局我们可以带出截取出来写成一个layout_toolbar.xml布局,在使用的时候通过include引入布局

创建toolbar

1、新建xml布局layout_toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:binding="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="toolbarViewModel"
            type="com.makuan.template.base.ToolbarViewModel" />
    </data>

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:background="@color/white"
        binding:contentInsetStart="0dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/iv_back"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:background="?selectableItemBackground"
                android:padding="12dp"
                android:src="@mipmap/back"
                binding:onClickCommand="@{toolbarViewModel.backOnClick}" />

            <TextView
                android:id="@+id/tv_title"
                style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:ellipsize="end"
                android:gravity="center"
                android:maxEms="12"
                android:singleLine="true"
                android:text="@{toolbarViewModel.titleText}"
                android:textColor="@color/textColor"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/tv_right_text"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="?selectableItemBackground"
                android:gravity="center"
                android:padding="12dp"
                android:text="@{toolbarViewModel.rightText}"
                android:textColor="@color/textColor"
                android:textSize="18sp"
                android:visibility="@{toolbarViewModel.rightTextVisibleObservable}"
                binding:onClickCommand="@{toolbarViewModel.rightTextOnClick}" />

            <ImageView
                android:id="@+id/iv_right_icon"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="?selectableItemBackground"
                android:gravity="center"
                android:padding="12dp"
                android:src="@mipmap/toolbar_more"
                android:visibility="@{toolbarViewModel.rightIconVisibleObservable}"
                binding:onClickCommand="@{toolbarViewModel.rightIconOnClick}" />

            <View
                style="@style/ViewLineStyle"
                android:layout_alignParentBottom="true" />
        </RelativeLayout>
    </android.support.v7.widget.Toolbar>
</layout>

2、创建toolbarViewModel.java

public class ToolbarViewModel<M extends BaseModel> extends BaseViewModel<M> {
    //标题文字
    public ObservableField<String> titleText = new ObservableField<>("");
    //右边文字
    public ObservableField<String> rightText = new ObservableField<>("更多");
    //右边文字的观察者
    public ObservableInt rightTextVisibleObservable = new ObservableInt(View.GONE);
    //右边图标的观察者
    public ObservableInt rightIconVisibleObservable = new ObservableInt(View.GONE);
    //兼容databinding,去泛型化
    public ToolbarViewModel toolbarViewModel;

    public ToolbarViewModel(@NonNull Application application) {
        this(application, null);
    }

    public ToolbarViewModel(@NonNull Application application, M model) {
        super(application, model);
        toolbarViewModel = this;
    }

    /**
     * 设置标题
     *
     * @param text 标题文字
     */
    public void setTitleText(String text) {
        titleText.set(text);
    }

    /**
     * 设置右边文字
     *
     * @param text 右边文字
     */
    public void setRightText(String text) {
        rightText.set(text);
    }

    /**
     * 设置右边文字的显示和隐藏
     *
     * @param visibility
     */
    public void setRightTextVisible(int visibility) {
        rightTextVisibleObservable.set(visibility);
    }

    /**
     * 设置右边图标的显示和隐藏
     *
     * @param visibility
     */
    public void setRightIconVisible(int visibility) {
        rightIconVisibleObservable.set(visibility);
    }

    /**
     * 返回按钮的点击事件
     */
    public final BindingCommand backOnClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            finish();
        }
    });

    public BindingCommand rightTextOnClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            rightTextOnClick();
        }
    });
    public BindingCommand rightIconOnClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            rightIconOnClick();
        }
    });

    /**
     * 右边文字的点击事件,子类可重写
     */
    protected void rightTextOnClick() {
    }

    /**
     * 右边图标的点击事件,子类可重写
     */
    protected void rightIconOnClick() {
    }
}

创建完成

开始使用toolbar,在新的activity中引用

1、xml文件引用 layout_toolbar.xml

<include
    android:id="@+id/include"
    layout="@layout/layout_toolbar"
    binding:toolbarViewModel="@{viewModel.toolbarViewModel}" />

2、viewModel 中继承 BaseViewModel 换成 ToolbarViewModel 就结束了,

设置toolbar 标题事件

1、在 ViewModel 构造方法中调用下面方法

setTitleText 设置标题
setRightText 设置右边文字
setRightTextVisible 显示隐藏右边文字
setRightIconVisible 显示隐藏右边图标,(右边文字和图标最好只显示一个,他们是重叠的)

2、在ViewModel 中重写方法

rightTextOnClick 右边文字点击事件
rightIconOnClick 右边图标点击事件

以上方法都是在创建ToolbarViewModel.java的时候创建的方法,可以按照需求添加

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容