android 自定义 header

自定义header.png
可以修改哪些参数

1、返回按钮图片替换、按钮宽高修改、按钮背景颜色修改
2、整个headerLayout背景色的修改
3、右边可以是文字、图片,可以修改文字大小,图片大小,图片背景色修改
4、如果只设置了headerLayout的背景色,其它地方都没有设置颜色,那么其它地方都按headerLayout的背景色来

更新

2020-02-15
1、增大返回按钮的宽高


        
        

        
        
        
        
        
        
        
        
        
        

        
        
        
        
        
        

        
        
        
        
        
        

        
        
        
        
        
        
        
        
        
        
    

    #FB4C7F

    
    
    
    
    
    

    /**
     * @date :2019/11/27 0027
     * @author : gaoxiaoxiong
     * @description:由浮点型转成整型时,原则是忽略小数点部分。
     **/
    public int getDimensionPixelOffset(Context context,int id){
        return context.getResources().getDimensionPixelOffset(id);
    }

/**
 * @date: 创建时间:2020/3/5
 * @author: gaoxiaoxiong
 * @descripion:设置标题
 **/
public class HeaderViewLayout extends FrameLayout {
    private Context mContext;
    private int headerBackColor;//整个View的背景色

    //左边
    private int flLeftLayoutBackGroundColor;
    private int ivLeftBackImageViewResource;
    private int ivLeftBackImageViewBackGroundColor;
    private int ivLeftBackImageWidth, ivLeftBackImageHeight;

    //中间文字
    private int middleTextSize;
    private String middleText;
    private int middleTextColor;

    //右边文字
    private int rightTextSize;
    private String rightText;
    private int rightTextColor;

    //右边图片
    private int flRightLayoutBackGroundColor;
    private int ivRightBackImageViewBackGroundColor;
    private int ivRightBackImageViewResource;
    private int ivRightBackImageWidth, ivRightBackImageHeight;

    public HeaderViewLayout(@NonNull Context context) {
        this(context, null);
    }

    public HeaderViewLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public HeaderViewLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.mContext = context;
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.HeaderViewLayout);
        headerBackColor = typedArray.getColor(R.styleable.HeaderViewLayout_headerBackColor, ContextCompat.getColor(mContext, R.color.app_theme_color_sysm));

        //左边
        flLeftLayoutBackGroundColor = typedArray.getColor(R.styleable.HeaderViewLayout_headerLeftFrameBackColor, 0);
        ivLeftBackImageViewResource = typedArray.getResourceId(R.styleable.HeaderViewLayout_headerLeftImage, R.drawable.icon_back_white);
        ivLeftBackImageViewBackGroundColor = typedArray.getColor(R.styleable.HeaderViewLayout_headerLeftImageBackColor, 0);
        ivLeftBackImageHeight = typedArray.getDimensionPixelOffset(R.styleable.HeaderViewLayout_headerLeftImageHeight, mContext.getResources().getDimensionPixelOffset(R.dimen.dp_25));
        ivLeftBackImageWidth = typedArray.getDimensionPixelOffset(R.styleable.HeaderViewLayout_headerLeftImageWidth, mContext.getResources().getDimensionPixelOffset(R.dimen.dp_25));

        //中间
        middleText = typedArray.getString(R.styleable.HeaderViewLayout_headerMiddleText);
        middleTextSize = typedArray.getInt(R.styleable.HeaderViewLayout_headerMiddleTextSize, 18);
        middleTextColor = typedArray.getColor(R.styleable.HeaderViewLayout_headerMiddleTextColor, ContextCompat.getColor(mContext, R.color.white));

        //右边
        flRightLayoutBackGroundColor = typedArray.getColor(R.styleable.HeaderViewLayout_headerRightFrameBackColor, 0);

        //右边文字
        rightTextSize = typedArray.getInt(R.styleable.HeaderViewLayout_headerRightTextSize,14);
        rightTextColor = typedArray.getColor(R.styleable.HeaderViewLayout_headerRightTextColor, ContextCompat.getColor(mContext, R.color.black_333333));
        rightText = typedArray.getString(R.styleable.HeaderViewLayout_headerRightText);

        //右边图片
        ivRightBackImageViewBackGroundColor = typedArray.getColor(R.styleable.HeaderViewLayout_headerRightImageBackColor, 0);
        ivRightBackImageViewResource = typedArray.getResourceId(R.styleable.HeaderViewLayout_headerRightImage, 0);
        ivRightBackImageWidth = typedArray.getDimensionPixelOffset(R.styleable.HeaderViewLayout_headerRightImageWidth,mContext.getResources().getDimensionPixelOffset(R.dimen.dp_25));
        ivRightBackImageHeight = typedArray.getDimensionPixelOffset(R.styleable.HeaderViewLayout_headerRightImageHeight,mContext.getResources().getDimensionPixelOffset(R.dimen.dp_25));

        typedArray.recycle();
        init();
    }

    private void init() {
        //左边
        FrameLayout frameBackLayout = new FrameLayout(mContext);
        frameBackLayout.setId(R.id.base_header_framelayout_back);
        FrameLayout.LayoutParams flrameBackLayoutLayoutParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
        flrameBackLayoutLayoutParams.gravity = Gravity.CENTER_VERTICAL;
        frameBackLayout.setPadding(DensityUtil.getInstance().getDimensionPixelOffset(mContext, R.dimen.dp_10), 0, DensityUtil.getInstance().getDimensionPixelOffset(mContext, R.dimen.dp_10), 0);
        int totalWidth = ivLeftBackImageWidth + DensityUtil.getInstance().getDimensionPixelOffset(mContext, R.dimen.dp_10) * 2 + DensityUtil.getInstance().getDimensionPixelOffset(mContext, R.dimen.dp_5);
        flrameBackLayoutLayoutParams.width = totalWidth;
        frameBackLayout.setLayoutParams(flrameBackLayoutLayoutParams);
        if (flLeftLayoutBackGroundColor != 0) {
            frameBackLayout.setBackgroundColor(flLeftLayoutBackGroundColor);
        }


        ImageView ivBackImageView = new ImageView(mContext);
        FrameLayout.LayoutParams ivBackImageLayoutParams = new FrameLayout.LayoutParams(ivLeftBackImageWidth, ivLeftBackImageHeight);
        ivBackImageView.setScaleType(ImageView.ScaleType.FIT_XY);
        ivBackImageView.setLayoutParams(ivBackImageLayoutParams);
        ivBackImageLayoutParams.gravity = Gravity.CENTER;
        if (ivLeftBackImageViewBackGroundColor != 0) {
            ivBackImageView.setBackgroundColor(ivLeftBackImageViewBackGroundColor);
        }

        ivBackImageView.setImageResource(ivLeftBackImageViewResource);
        frameBackLayout.addView(ivBackImageView);
        this.addView(frameBackLayout);

        //中间文字
        TextView middleTextView = new TextView(mContext);
        middleTextView.setId(R.id.tv_base_header_title);
        FrameLayout.LayoutParams middleTextViewLayoutParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
        middleTextViewLayoutParams.gravity = Gravity.CENTER;
        middleTextView.setTextSize(middleTextSize);
        middleTextView.setGravity(Gravity.CENTER);
        middleTextView.setTextColor(middleTextColor);
        middleTextView.setText(StringUtils.isEmptyValue(middleText));
        middleTextView.setLayoutParams(middleTextViewLayoutParams);
        this.addView(middleTextView);

        //右边
        FrameLayout frameRightLayout = new FrameLayout(mContext);
        frameRightLayout.setId(R.id.base_header_framelayout_right);
        FrameLayout.LayoutParams frameRightLayoutLayoutParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
        frameRightLayoutLayoutParams.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;
        frameRightLayout.setLayoutParams(frameRightLayoutLayoutParams);
        frameRightLayout.setPadding(DensityUtil.getInstance().getDimensionPixelOffset(mContext, R.dimen.dp_10), 0, DensityUtil.getInstance().getDimensionPixelOffset(mContext, R.dimen.dp_10), 0);
        if (flRightLayoutBackGroundColor != 0) {
            frameRightLayout.setBackgroundColor(flRightLayoutBackGroundColor);
        }
        if (!StringUtils.isEmpty(rightText) || ivRightBackImageViewResource != 0) {
            if (!StringUtils.isEmpty(rightText)) {//显示右边文字
                TextView rightTextView = new TextView(mContext);
                rightTextView.setId(R.id.tv_baseheader_right_text);
                FrameLayout.LayoutParams rightTextViewLayoutParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
                rightTextViewLayoutParams.gravity = Gravity.CENTER;
                rightTextView.setTextSize(rightTextSize);
                rightTextView.setGravity(Gravity.CENTER);
                rightTextView.setText(StringUtils.isEmptyValue(rightText));
                rightTextView.setTextColor(rightTextColor);
                rightTextView.setLayoutParams(rightTextViewLayoutParams);
                frameRightLayout.addView(rightTextView);
            } else {
                ImageView ivRightImageView = new ImageView(mContext);
                ivRightImageView.setId(R.id.iv_baseheader_right_iv);
                FrameLayout.LayoutParams ivRightImageViewLayoutParams = new FrameLayout.LayoutParams(ivRightBackImageWidth, ivRightBackImageHeight);
                ivRightImageViewLayoutParams.gravity = Gravity.CENTER;
                ivRightImageView.setScaleType(ImageView.ScaleType.FIT_XY);
                ivRightImageView.setLayoutParams(ivRightImageViewLayoutParams);
                if (ivRightBackImageViewBackGroundColor != 0) {
                    ivRightImageView.setBackgroundColor(ivRightBackImageViewBackGroundColor);
                }
                ivRightImageView.setImageResource(ivRightBackImageViewResource);
                frameRightLayout.addView(ivRightImageView);
            }
        }
        this.addView(frameRightLayout);
        this.setId(R.id.base_header_framelayout);
        this.setBackgroundColor(headerBackColor);
    }

 /**
     * @date 创建时间:2020/5/15 0015
     * @auther gaoxiaoxiong
     * @Descriptiion 添加右边的视图,会删除之前写好的视图
     **/
    public void setRightView(View view){
        FrameLayout.LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
        layoutParams.gravity = Gravity.CENTER;
        view.setLayoutParams(layoutParams);
        FrameLayout frameRightLayout = this.findViewById(R.id.base_header_framelayout_right);
        frameRightLayout.removeAllViews();
        frameRightLayout.addView(view);
    }

}

你可能感兴趣的:(android 自定义 header)