Android多状态布局+全局ToolBar

作者: 一梦付浮生 | 来源:发表于2019-04-21 00:58 被阅读132次

    1.国际惯例先上图+Github地址

    Android多状态布局+全局ToolBar-Github地址给个star呗,有问题可以lssues谢谢支持。

    test.gif

    2.功能概述

    2.1 全局标题栏功能简介

    1.自定义XML
    2.一行代码控制标题栏是否添加
    3.可在BaseActivity中封装基础方法,例如:标题文字、颜色、大小、左侧按钮或文字等。
    4.高度自定义封装,可直接使用商业项目

    2.2 多状态布局

    1.默认已添加两种基础布局、分别为LoadingLayout和FailLayout页面,但需要自己添加页面、可直接获取View进行其他操作
    2.可获取布局状态
    3.一行代码设置布局状态
    4.如果你觉得基础layout不够用,可自定义添加布局XML显示

    3.使用方法

    1. 添加

    1.1在全局build.gradle中添加

    allprojects {
            repositories {
                ...
                maven { url 'https://jitpack.io' }
            }
        }
    

    1.2在app下的build.gradle中添加

    dependencies {
                 implementation 'com.github.luckyfj:BaseToolBar:1.0.0'
        }
    

    2.将自己的BaseActivity继承系统中BaseStateLayout方法可直接使用,下面是我写的TestBaseActivity,可参考

    package com.hackerfj.basetoolbar;
    
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import com.hackerfj.statelayout.BaseStateLayout;
    
    public abstract class BaseActivity extends BaseStateLayout {
    
    
        /**
         * @return 内容布局
         */
        protected abstract int contentView();
    
        /**
         * 初始化方法
         */
        protected abstract void initViews();
    
        /**
         * 设置内容布局,因为这是BaseActivity则将contentView传至继承页面设置
         * @return
         */
        @Override
        protected int setContentLayout() {
            return contentView();
        }
    
    
        /**
         * 设置是否添加Toolbar设置boolean,如果设置为false将setToolbar设置为null即可
         * @return
         */
        @Override
        protected boolean isAddToolBar() {
            return true;
        }
    
        /**
         * 设置标题栏View
         * @return
         */
        @Override
        protected int setToolbar() {
            return R.layout.base_tool_bar;
        }
    
        /**
         * 设置加载中View
         * @return
         */
        @Override
        protected int setLoadingView() {
            return R.layout.layout_loading;
        }
    
        /**
         * 设置加载失败View
         * @return
         */
        @Override
        protected int setFailView() {
            return R.layout.layout_fail;
        }
    
        /**
         * 设置初始化操作,因为这是BaseActivity则将initView传至继承页面设置
         * @return
         */
        @Override
        public void initView() {
            initViews();
        }
    
        /**
         * 实例:设置标题,你可以用来做更多的操作,举一反三
         * @param title
         */
        public void setToolbarTitle(String title){
            TextView tvTitle =  getBaseToolbar().findViewById(R.id.tv_bar_title);
            tvTitle.setText(title);
        }
    
        /**
         * 动态设置我想显示的View
         * @param view
         */
        public void addView(int view){
            View myView = View.inflate(this, view, null);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            myView.setLayoutParams(params);
            setMyView(myView);
        }
    }
    
    

    3.使用Activity示例代码Kotlin

    package com.hackerfj.basetoolbar
    
    import kotlinx.android.synthetic.main.base_tool_bar.*
    
    class TestActivity : BaseActivity() {
    
        override fun contentView(): Int {
            return R.layout.activity_main
        }
    
        override fun initViews() {
            setToolbarTitle("主页")
    
            tv_bar_title.setOnClickListener {
                // 布局切换至加载中
                setLayout(com.hackerfj.statelayout.LayoutState.STATE_LOADING)
            }
            tv_bar_left.setOnClickListener {
                // 布局切换至失败
                setLayout(com.hackerfj.statelayout.LayoutState.STATE_FAIL)
            }
            tv_bar_right.setOnClickListener {
                // 布局切换至内容页面
    //            setLayout(LayoutState.STATE_SUCCESS)
                //动态设置我想显示的View
                addView(R.layout.layout_my_view)
            }
        }
    
    }
    

    4.使用Activity示例代码Java

    package com.hackerfj.basetoolbar;
    
    import android.view.View;
    
    public class TestActivity extends BaseActivity {
        @Override
        protected int contentView() {
            return R.layout.activity_main;
        }
    
        @Override
        protected void initViews() {
            setToolbarTitle("主页");
    
            findViewById(R.id.tv_bar_title).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 布局切换至加载中
                    setLayout(com.hackerfj.statelayout.LayoutState.STATE_LOADING);
                }
            });
    
            findViewById(R.id.tv_bar_left).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 布局切换至失败
                    setLayout(com.hackerfj.statelayout.LayoutState.STATE_FAIL);
                }
            });
            findViewById(R.id.tv_bar_right).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 布局切换至内容页面
    //            setLayout(LayoutState.STATE_SUCCESS)
                    //动态设置我想显示的View
                    addView(R.layout.layout_my_view);
                }
            });
        }
    }
    
    

    相关文章

      网友评论

        本文标题:Android多状态布局+全局ToolBar

        本文链接:https://www.haomeiwen.com/subject/adargqtx.html