自定义TitleView,用来实现开发时候统一标题栏

平时一直修改每一个 标题栏太麻烦,所以统一设计一个样式算了。开始时候用的是include方式实现,不过每次给文字赋值,重写颜色啥的一直感觉挺麻烦的。然后就把include中的layout放到了一个自定义view中,这样可以方便的设置一些点击事件啥的,写起来都是对同一个view操作,感觉上也方便点,下面是主体代码:

public class TitleView extends LinearLayout implements OnClickListener {
	/** 左图标 */
	private TextView mLeftView;
	/** 标题 */
	private TextView mTitleNameView;
	/** 右图标 */
	private TextView mRightView;
	private OnCommonTitleClickListener listener;
	private Context mContext;

	public TitleView(Context context) {
		super(context);
		mContext = context;
		initView();
	}

	public TitleView(Context context, AttributeSet attrs) {
		super(context, attrs);
		mContext = context;
		initView();
	}

	public TitleView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		mContext = context;
		initView();
	}

	/**
	 * 各个按钮分配不同的值,来对应各自的点击事件
	 */
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.common_title_left_btn:
			if (listener != null) {
				listener.onCommonTitleClick(COMMON_TITLE_LEFT);
			}
			break;
		case R.id.common_title_right_btn:
			if (listener != null) {
				listener.onCommonTitleClick(COMMON_TITLE_RIGHT);
			}
			break;
		case R.id.common_title_name:
			if (listener != null) {
				listener.onCommonTitleClick(COMMON_TITLE_NAME);
			}
			break;
		}
	}

	/**
	 * 初始化视图
	 */
	@SuppressLint("InflateParams")
	private void initView() {
		// 已经建立好的一个布局
		View titleView = LayoutInflater.from(mContext).inflate(
				R.layout.view_title, null);
		mLeftView = (TextView) titleView
				.findViewById(R.id.common_title_left_btn);
		mTitleNameView = (TextView) titleView
				.findViewById(R.id.common_title_name);
		mRightView = (TextView) titleView
				.findViewById(R.id.common_title_right_btn);
		addView(titleView, RelativeLayout.LayoutParams.MATCH_PARENT,
				getResources().getDimensionPixelOffset(R.dimen.px_to_dip_96));
		// 给按钮设置监听事件为当前类
		mLeftView.setOnClickListener(this);
		mRightView.setOnClickListener(this);
		mTitleNameView.setOnClickListener(this);
	}

	/**
	 * 设置标题
	 * 
	 * @param id
	 *            string的id
	 */
	public void setTitleName(int id) {
		mTitleNameView.setText(id);
	}

	/**
	 * 设置标题
	 * 
	 * @param name
	 *            标题名字
	 */
	public void setTitleName(CharSequence name) {
		mTitleNameView.setText(name);
	}

	/**
	 * 设置左图标
	 * 
	 * @param imageId
	 *            图标id
	 */
	public void setTitleLeftImage(int imageId) {
		Drawable drawable = getResources().getDrawable(imageId);
		drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
				drawable.getIntrinsicHeight());
		mLeftView.setCompoundDrawables(drawable, null, null, null);
		mLeftView.setVisibility(View.VISIBLE);
	}

	/**
	 * 设置左图标
	 * 
	 * @param imageId
	 *            对应的图片
	 */
	public void setTitleLeftImage(Drawable imageDrawable) {
		if (imageDrawable != null) {
			imageDrawable.setBounds(0, 0, imageDrawable.getIntrinsicWidth(),
					imageDrawable.getIntrinsicHeight());
			mLeftView.setCompoundDrawables(imageDrawable, null, null, null);
		}
		mLeftView.setVisibility(View.VISIBLE);
	}

	/**
	 * 设置左标题
	 * 
	 * @param imageId
	 *            对应的string中的id
	 */
	public void setTitleLeftText(int textId) {
		mLeftView.setText(textId);
		mLeftView.setVisibility(View.VISIBLE);
	}

	/**
	 * 设置左标题
	 * 
	 * @param text
	 *            对应的文字
	 */
	public void setTitleLeftText(CharSequence text) {
		mLeftView.setText(text);
		mLeftView.setVisibility(View.VISIBLE);
	}

	public void setTitleRightImage(int imageId) {
		Drawable drawable = getResources().getDrawable(imageId);
		drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
				drawable.getIntrinsicHeight());
		mRightView.setCompoundDrawables(null, null, drawable, null);
		mRightView.setVisibility(View.VISIBLE);
	}

	public void setTitleRightImage(Drawable imageDrawable) {
		if (imageDrawable != null) {
			imageDrawable.setBounds(0, 0, imageDrawable.getIntrinsicWidth(),
					imageDrawable.getIntrinsicHeight());
			mRightView.setCompoundDrawables(null, null, imageDrawable, null);
		}
		mRightView.setVisibility(View.VISIBLE);
	}

	public void setTitleRightText(int textId) {
		mRightView.setText(textId);
		mRightView.setVisibility(View.VISIBLE);
	}

	public void setTitleRightText(CharSequence text) {
		mRightView.setText(text);
		mRightView.setVisibility(View.VISIBLE);
	}

	public void setTitleRightTextColor(int colorId) {
		mRightView.setTextColor(mContext.getResources().getColor(colorId));
		mRightView.setVisibility(View.VISIBLE);
	}

	public void setTitleLeftTextColor(int colorId) {
		mLeftView.setTextColor(mContext.getResources().getColor(colorId));
		mLeftView.setVisibility(View.VISIBLE);
	}

	/**
	 * 公开方法,设置titleView的监听
	 * 
	 * @param clickListener
	 *            实现了OnCommonTitleClickListener的监听器
	 */
	public void setTitleClickListener(OnCommonTitleClickListener clickListener) {
		listener = clickListener;
	}

	public static final int COMMON_TITLE_LEFT = 0;
	public static final int COMMON_TITLE_RIGHT = 1;
	public static final int COMMON_TITLE_NAME = 2;

	public interface OnCommonTitleClickListener {
		void onCommonTitleClick(int buttonType);
	}
}

然后是主要的一个布局,由于是从项目中取出来的,有些值和图片就不放在上面了,要是用的时候自己改改呗:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_title"
    android:layout_width="match_parent"
    android:layout_height="@dimen/px_to_dip_96"
    android:background="@color/activity_login_text_color_register" >

    <TextView
        android:id="@+id/common_title_left_btn"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textColor="@drawable/title_text_selector"
        android:textSize="@dimen/px_to_sp_30" />

    <TextView
        android:id="@+id/common_title_name"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:layout_gravity="center_horizontal"
        android:ellipsize="end"
        android:gravity="center"
        android:singleLine="true"
        android:textColor="@android:color/white"
        android:textSize="@dimen/px_to_sp_34" />

    <TextView
        android:id="@+id/common_title_right_btn"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        android:paddingRight="@dimen/px_to_dip_24"
        android:textColor="@drawable/title_text_selector"
        android:textSize="@dimen/px_to_sp_30"
        android:visibility="gone" />

</RelativeLayout>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值