BarItem.java 3.52 KB
package com.sunvote.statusbar.view;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import me.kaini.statusbar.R;


/**
 * 状态栏单个项[图标,文字]
 * {@link #setIcon(int)}变更图标
 * {@link #setText(int)}变更文字,{@link #setTextColor(int)}设置文字颜色,默认白色
 * {@link #setBarItemClickListener(OnBarItemClickListener)} 设置单个项单击监听
 * @author
 */
public class BarItem extends LinearLayout{

    private ImageView mIcon;
    private TextView mText;

    private int textVisibility = View.VISIBLE;

    private OnBarItemClickListener mListener;

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

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

    @SuppressLint("NewApi")
    public BarItem(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        initItem(context, attrs, defStyle);
    }

    private void initItem(Context ctx, AttributeSet attrs, int defStyle){
        LayoutInflater ll = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = ll.inflate(R.layout.bar_item, null);
        addView(v);

        mIcon = (ImageView)findViewById(R.id.iv_bar_icon );
        mText = (TextView)findViewById(R.id.tv_bar_text);

        TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.BarItem, defStyle, 0);
        Drawable icon = a.getDrawable(R.styleable.BarItem_android_icon);
        setIcon(icon);

        CharSequence txt = a.getText(R.styleable.BarItem_android_text);
        if(txt != null){
            setText(txt.toString());
        }

        int textColor = a.getColor(R.styleable.BarItem_android_textColor, getResources().getColor(android.R.color.white));
        setTextColor(textColor);

        textVisibility = a.getInt(R.styleable.BarItem_textVisibility, textVisibility);
        setTextVisibility(textVisibility);

        a.recycle();
    }

    public void setIcon(Drawable icon){
        if(icon == null){
            return;
        }
        this.mIcon.setImageDrawable(icon);
    }

    public void setIcon(int resId){
        setIcon(getResources().getDrawable(resId));
    }

    public void setText(int resId){
        setText(getResources().getString(resId));
    }

    public void setText(String text){
        this.mText.setText(text);
    }

    public void setTextColor(int textColor){
        mText.setTextColor(textColor);
    }

    /**
     * 设置文字的可见状态
     * @param visibility {@link View#GONE},{@link View#VISIBLE}
     * @attr R.styleable.BarItem_textVisibility
     */
    public void setTextVisibility(int visibility){
        mText.setVisibility(visibility);
    }

    /**
     * 设置图标单击事件监听器
     * @param l
     */
    public void setBarItemClickListener(OnBarItemClickListener l){
        this.mListener = l;
        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mListener != null) {
                    mListener.onClick(BarItem.this);
                }
            }
        });
    }

    /**
     * BarItem click event
     */
    public interface OnBarItemClickListener {
        void onClick(BarItem item);
    }
}