自定义view系列之——自定义ActionBar

我们在项目中,都会有统一的ActionBar,其中包括返回键,标题,搜索框,菜单(文字或者图标),我在项目中封装了适应各种情况的组件ActionBar。

github代码传送门: https://github.com/18380438200/CustomActionBar

先上效果图:

自定义view系列之——自定义ActionBar_第1张图片
超级截屏_20171026_153816.png

ActionBar类:

public class CustomActionBar extends LinearLayout {

    private ImageView headerBack;
    private TextView headerTitle, headerMenuText;
    private LinearLayout llSearch;
    private LayoutInflater mInflater;
    private View headView;

    public CustomActionBar(Context context) {
        super(context);
        init(context);
    }

    public CustomActionBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public void init(Context context) {
        mInflater = LayoutInflater.from(context);
        headView = mInflater.inflate(R.layout.customactionbar, null);
        addView(headView);
        initView();
    }

    private void initView() {
        headerBack = headView.findViewById(R.id.header_back);
        headerTitle = headView.findViewById(R.id.header_title);
        headerMenuText = headView.findViewById(R.id.header_menu);
        llSearch = headView.findViewById(R.id.ll__search);
        headerBack.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                ((Activity) getContext()).finish();
            }
        });
    }

    public void setStyle(String title) {
        if (title != null)
            headerTitle.setText(title);
    }

    /**
     * 标题加文字菜单
     *
     * @param title
     * @param menuText
     * @param listener
     */
    public void setStyle(String title, String menuText, OnClickListener listener) {
        setStyle(title);
        if (menuText != null)
            headerMenuText.setText(menuText);
        headerMenuText.setOnClickListener(listener);
    }

    /**
     * 只有右边字体
     *
     * @param menuText
     * @param listener
     */
    public void setStyle(String menuText, OnClickListener listener) {
        headerBack.setVisibility(GONE);
        if (menuText != null)
            headerMenuText.setText(menuText);
        headerMenuText.setOnClickListener(listener);
    }

    /**
     * 标题加图标菜单
     *
     * @param title
     * @param menuImgResource
     * @param listener
     */
    public void setStyle(String title, int menuImgResource, OnClickListener listener) {
        setStyle(title);
        headerMenuText.setBackgroundResource(menuImgResource);
        headerMenuText.setOnClickListener(listener);
    }

    public void setStyle(boolean hasSearch){
        if(hasSearch){
            llSearch.setVisibility(VISIBLE);
        }
    }

    /**
     * 将默认的返回按钮功能去掉
     */
    public void setStyleNoBack(String title) {
        setStyle(title);
        headerBack.setVisibility(GONE);
    }

}

ActionBar的xml布局




    

    

        
    

    

        
    

    

        
    

    


使用示例:

//actionbar0默认只有返回键

        //只有标题
        actionBar1.setStyleNoBack("标题");

        //只有菜单
        actionBar2.setStyle("菜单", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"点击菜单",Toast.LENGTH_SHORT).show();
            }
        });

        //返回键 + 标题
        actionBar3.setStyle("标题");

        //返回键 + 标题 + 菜单
        actionBar4.setStyle("标题", "菜单", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"点击菜单",Toast.LENGTH_SHORT).show();
            }
        });

        //返回键 + 标题 + 菜单图标
        actionBar5.setStyle("标题", R.mipmap.more_white, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"点击菜单",Toast.LENGTH_SHORT).show();
            }
        });

        //搜索框模式
        actionBar6.setStyle(true);

你可能感兴趣的:(自定义view系列之——自定义ActionBar)