您的位置:首页 > 其它

baseactivity实现封装toolbar

2017-01-17 16:24 330 查看
最近看了material design发现toolbar是一个非常好用的东西,以前做项目的时候喜欢写导航条然后baseactivity处理,最后一直include,今天我封装了baseactivity实现全局继承toolbar,下面说一下我的实现思路首先写baseactivity,继承AppCompatActivity 在baseactivity里面封装一些公共用法比如进度加载匡,等等 。此次封装实现了代码的复用性,提高了布局的优化,不用一直include布局能最大的简化布局 ,只需要继承basedetailactivity就可以自带toolbar

github地址:https://github.com/yuanchongzhang/MyDefineToolBar  欢迎star

    @SuppressWarnings("unchecked")

    public <T extends View> T findView(int id) {

        return (T) findViewById(id);

    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        initSystemBarTint();

    }

    /** 子类可以重写改变状态栏颜色 */

    protected int setStatusBarColor() {

        return getColorPrimary();

    }

    /** 子类可以重写决定是否使用透明状态栏 */

    protected boolean translucentStatusBar() {

        return false;

    }

    /** 设置状态栏颜色 */

    protected void initSystemBarTint() {

        Window window = getWindow();

        if (translucentStatusBar()) {

            // 设置状态栏全透明

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

                window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

                window.setStatusBarColor(Color.TRANSPARENT);

            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            }

            return;

        }

        // 沉浸式状态栏

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            //5.0以上使用原生方法

            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

            window.setStatusBarColor(setStatusBarColor());

        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

            //4.4-5.0使用三方工具类

            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

          /*  SystemBarTintManager tintManager = new SystemBarTintManager(this);

            tintManager.setStatusBarTintEnabled(true);

            tintManager.setStatusBarTintColor(setStatusBarColor());*/

        }

    }

    /** 获取主题色 */

    public int getColorPrimary() {

        TypedValue typedValue = new TypedValue();

        getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);

        return typedValue.data;

    }

    /** 获取深主题色 */

    public int getDarkColorPrimary() {

        TypedValue typedValue = new TypedValue();

        getTheme().resolveAttribute(R.attr.colorPrimaryDark, typedValue, true);

        return typedValue.data;

    }

    /** 初始化 Toolbar */

    public void initToolBar(Toolbar toolbar, boolean homeAsUpEnabled, String title) {

        toolbar.setTitle(title);

        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(homeAsUpEnabled);

    }

    public void initToolBar(Toolbar toolbar, boolean homeAsUpEnabled, int resTitle) {

        initToolBar(toolbar, homeAsUpEnabled, getString(resTitle));

    }

    public void showToast(String msg) {

        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();

    }

    private ProgressDialog dialog;

    public void showLoading() {

        if (dialog != null && dialog.isShowing()) return;

        dialog = new ProgressDialog(this);

        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        dialog.setCanceledOnTouchOutside(false);

        dialog.setProgr
4000
essStyle(ProgressDialog.STYLE_SPINNER);

        dialog.setMessage("请求网络中...");

        dialog.show();

    }

    public void dismissLoading() {

        if (dialog != null && dialog.isShowing()) {

            dialog.dismiss();

        }

    }

这是baseactivity的代码,之后写basedetail继承baseactivity这是basedetail实现的代码

    protected ActionBar actionBar;

    /*  protected TextView requestState;

      protected TextView requestHeaders;

      protected TextView responseData;

      protected TextView responseHeader;*/

    protected FrameLayout rootContent;

    Toolbar toolbar;

    TextView title_name;

    /*是否第一次加载返回*/

    private boolean title_back_first = true;

    /*是否是返回(有可能是代表别的功能)*/

    private boolean is_title_back = true;

    ImageView title_back;

    TextView textView;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        actionBar = getSupportActionBar();

        if (actionBar != null) {

            actionBar.setDisplayShowTitleEnabled(true);

            actionBar.setDisplayHomeAsUpEnabled(true);

            actionBar.setDisplayShowHomeEnabled(true);

        }

        getDelegate().setContentView(R.layout.activity_base);

        Window window = getWindow();

          rootContent = (FrameLayout) window.findViewById(R.id.content);

        toolbar = (Toolbar) window.findViewById(R.id.toolbar);

        title_name = (TextView) window.findViewById(R.id.title_name);

        title_back = (ImageView) window.findViewById(R.id.title_back);

        textView = (TextView) window.findViewById(R.id.title_rightTv);

        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayShowTitleEnabled(false);

        onActivityCreate(savedInstanceState);

    }

最后继承basedetailactivity

    /**

     * 设置title

     *

     * @param title :title

     */

    protected void setTitleName(String title) {

        title_name.setText(title);

    }

    /**

     * 设置返回

     *

     * @param back        :是否返回:是-->返回,不是则设置其他图标

     * @param resourcesId :图标id,返回时随意设置,不使用

     */

    protected void setTitleBack(final boolean back, int resourcesId) {

        is_title_back = back;

        if (title_back_first || title_back == null) {

            title_back.setOnClickListener(this);

            title_back_first = false;

        }

        title_back.setVisibility(View.VISIBLE);

        if (!back) {

            title_back.setImageResource(resourcesId);

        }

    }

    /**

     * title右侧文字

     *

     * @param str :文字内容

     */

    protected void setTitleRightText(String str) {

        textView.setVisibility(View.VISIBLE);

        textView.setText(str);

        textView.setOnClickListener(this);

    }

    protected abstract void onActivityCreate(Bundle savedInstanceState);

    @Override

    public void setTitle(CharSequence title) {

        if (actionBar != null) actionBar.setTitle(title);

    }

    @Override

    public void setTitle(int titleId) {

        if (actionBar != null) actionBar.setTitle(titleId);

    }

    @Override

    public View findViewById(int id) {

        return rootContent.findViewById(id);

    }

    private void clearContentView() {

        rootContent.removeAllViews();

    }

    @Override

    public void setContentView(int layoutResID) {

        clearContentView();

        getLayoutInflater().inflate(layoutResID, rootContent, true);

    }

    @Override

    public void setContentView(View view) {

        clearContentView();

        rootContent.addView(view);

    }

    @Override

    public void setContentView(View view, ViewGroup.LayoutParams params) {

        clearContentView();

        rootContent.addView(view, params);

    }

public class MyToolBarActivity extends BaseDetailActivity {

    // setContentView(R.layout.activity_toolbar);

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_toolbar);

        setTitleName("adsklfj");//title

                 setTitleBack(false,R.mipmap.ic_back);//有图标,但不是返回

        setTitleBack(true, 0);//返回

        setTitleRightText("保存");//右侧文字

    }

    @Override

    protected void onActivityCreate(Bundle savedInstanceState) {

    }

    @Override

    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.title_back:

                Toast.makeText(this, "点击了返回按钮", Toast.LENGTH_SHORT).show();

                break;

            case R.id.title_rightTv:

                Toast.makeText(this, "点击了右键", Toast.LENGTH_SHORT).show();

                break;

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: