安卓自定义顶部导航栏

2018-07-24  本文已影响0人  wcdd

1、第一步新建MyToolBar.java

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.tangzhuozhuan.mz.R;


public class MyToolBar extends LinearLayout {

    private String titleTextStr;
    private TitleOnClickListener titleOnClickListener;
    private TextView tool_title;

    public MyToolBar(Context context) {
        this(context, null);
    }

    public MyToolBar(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyToolBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //TypedArray是一个数组容器用于存放属性值
        @SuppressLint("CustomViewStyleable") TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyBar);

        int count = ta.getIndexCount();
        for (int i = 0; i < count; i++) {
            int attr = ta.getIndex(i);
            switch (attr) {

                case R.styleable.MyBar_titleText:

                    titleTextStr = ta.getString(R.styleable.MyBar_titleText);

                    break;
            }
        }
        //用完务必回收容器
        ta.recycle();

        //获取布局
        View view = LayoutInflater.from(context).inflate(R.layout.toolbar_layout, this);
        initView(view);
    }

    private void initView(View view) {
        LinearLayout tool_back = (LinearLayout) view.findViewById(R.id.tool_back);
        tool_title = (TextView) view.findViewById(R.id.tool_title);
        if (titleTextStr != null){
            tool_title.setText(titleTextStr);
        }
        tool_back.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (titleOnClickListener != null) {
                    titleOnClickListener.onBackClick();
                }
            }
        });
    }

    public void setTitle(String title) {
        if (!TextUtils.isEmpty(title)) {
            tool_title.setText(title);
        }
    }

    /**
     * 设置标题的点击监听
     *
     * @param titleOnClickListener
     */
    public void setOnTitleClickListener(TitleOnClickListener titleOnClickListener) {
        this.titleOnClickListener = titleOnClickListener;
    }

    /**
     * 监听标题点击接口
     */
    public interface TitleOnClickListener {
        /**
         * 返回按钮的点击事件
         */
        void onBackClick();

    }

}

2、在arrts.xml里面添加需要定义的属性

<declare-styleable name="MyBar">
        <attr name="titleText" format="string" />
    </declare-styleable>
image.png

3、在需要用到的地方

<com.test.mz.view.MyToolBar
        android:id="@+id/my_tool"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:titleText="设置"/>

4、代码里面使用

my_tool = (MyToolBar) findViewById(R.id.my_tool);
        my_tool.setOnTitleClickListener(new MyToolBar.TitleOnClickListener() {
            @Override
            public void onBackClick() {
                //点击返回上一级
                finish();
            }
        });

介绍完成,比较简单的案例,需要定义多个属性按照示例添加即可

上一篇下一篇

猜你喜欢

热点阅读