package com.centertoolbarmodule; import android.app.Activity; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutCompat; import android.support.v7.widget.TintTypedArray; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.widget.TextView; import static android.support.v7.appcompat.R.styleable; /** * Created by felix on 15/12/28. */ public class TitleToolbar extends BaseToolbar implements View.OnClickListener { private static final int DEFAULT_BACK_MARGIN_RIGHT = 8; private LinearLayoutCompat mTitleLayout; private TextView mTitleTextView; private CharSequence mTitleText; private boolean mTitleVisible; private TextView mSubtitleTextView; private CharSequence mSubTitleText; private boolean mSubTitleVisible; private TextView mCloseTextView; private CharSequence mCloseText; private boolean mCloseVisible; private TextView mBackTextView; private CharSequence mBackText; private boolean mBackVisible; private Activity activity; public TitleToolbar(Context context) { super(context); onBack(context); } public TitleToolbar(Context context, AttributeSet attrs) { super(context, attrs); onBack(context); } public TitleToolbar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); onBack(context); } @Override protected void initialize(Context context, AttributeSet attrs, int defStyleAttr) { super.initialize(context, attrs, defStyleAttr); onBack(context); } private void onBack(Context context) { if (context instanceof Activity) { activity = (Activity) context; } } @Override public void setNavigationOnClickListener(View.OnClickListener listener) { super.setNavigationOnClickListener(listener); } @Override public void setNavigationIcon(Drawable icon) { super.setNavigationIcon(icon); this.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (null != activity) activity.finish(); } }); } @Override public void setNavigationIcon(int resId) { super.setNavigationIcon(resId); this.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (null != activity) activity.finish(); } }); } @Override protected void initCustomView(Context context, AttributeSet attrs, int defStyleAttr) { TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs, styleable.Toolbar, defStyleAttr, 0); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TitleToolbar); if (!isChild(mTitleLayout)) { mTitleLayout = new LinearLayoutCompat(context); mTitleLayout.setOrientation(LinearLayoutCompat.VERTICAL); mTitleLayout.setGravity(typedArray.getInt( R.styleable.TitleToolbar_title_gravity, Gravity.CENTER_VERTICAL)); addView(mTitleLayout, new Toolbar.LayoutParams( Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT, Gravity.CENTER)); } if (!isChild(mTitleTextView, mTitleLayout)) { mTitleTextView = new TextView(context); mTitleTextView.setSingleLine(); mTitleTextView.setEllipsize(TextUtils.TruncateAt.END); mTitleTextView.setGravity(Gravity.CENTER); int titleTextAppearance = a.getResourceId(styleable.Toolbar_titleTextAppearance, 0); if (titleTextAppearance != 0) { mTitleTextView.setTextAppearance(context, titleTextAppearance); } if (a.hasValue(styleable.Toolbar_titleTextColor)) { int titleColor = a.getColor(styleable.Toolbar_titleTextColor, Color.WHITE); mTitleTextView.setTextColor(titleColor); } if (typedArray.hasValue(R.styleable.TitleToolbar_titleTextSize)) { mTitleTextView.setTextSize( typedArray.getDimensionPixelSize(R.styleable.TitleToolbar_backTextSize, 0)); } setTitle(a.getText(styleable.Toolbar_title)); setTitleVisible(typedArray.getBoolean(R.styleable.TitleToolbar_titleVisible, true)); mTitleLayout.addView(mTitleTextView, new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.WRAP_CONTENT)); } if (!isChild(mSubtitleTextView, mTitleLayout)) { mSubtitleTextView = new TextView(context); mSubtitleTextView.setSingleLine(); mSubtitleTextView.setEllipsize(TextUtils.TruncateAt.END); mSubtitleTextView.setGravity(Gravity.CENTER); int subTextAppearance = a.getResourceId(styleable.Toolbar_subtitleTextAppearance, 0); if (subTextAppearance != 0) { mSubtitleTextView.setTextAppearance(context, subTextAppearance); } if (a.hasValue(styleable.Toolbar_subtitleTextColor)) { int subTitleColor = a.getColor(styleable.Toolbar_subtitleTextColor, Color.WHITE); mSubtitleTextView.setTextColor(subTitleColor); } if (typedArray.hasValue(R.styleable.TitleToolbar_subtitleTextSize)) { mSubtitleTextView.setTextSize( typedArray.getDimensionPixelSize( R.styleable.TitleToolbar_subtitleTextSize, 0)); } setSubtitle(a.getText(styleable.Toolbar_subtitle)); setSubtitleVisible( typedArray.getBoolean(R.styleable.TitleToolbar_subtitleVisible, false)); mTitleLayout.addView(mSubtitleTextView, new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.WRAP_CONTENT)); } if (!isChild(mBackTextView)) { mBackTextView = new TextView(context); mBackTextView.setId(R.id.title_toolbar_back); mBackTextView.setSingleLine(); mBackTextView.setEllipsize(TextUtils.TruncateAt.END); mBackTextView.setGravity(Gravity.CENTER_VERTICAL); int backTextAppearance = typedArray.getResourceId(R.styleable.TitleToolbar_backTextAppearance, 0); if (backTextAppearance != 0) { mBackTextView.setTextAppearance(context, backTextAppearance); } if (typedArray.hasValue(R.styleable.TitleToolbar_backTextColor)) { int backTextColor = typedArray.getColor(R.styleable.TitleToolbar_backTextColor, Color.WHITE); mBackTextView.setTextColor(backTextColor); } if (typedArray.hasValue(R.styleable.TitleToolbar_backTextSize)) { mBackTextView.setTextSize( typedArray.getDimensionPixelSize(R.styleable.TitleToolbar_backTextSize, 0)); } Drawable drawable = typedArray.getDrawable(R.styleable.TitleToolbar_backIcon); if (drawable != null) { mBackTextView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); } setBackText(typedArray.getText(R.styleable.TitleToolbar_backText)); setBackVisible(typedArray.getBoolean(R.styleable.TitleToolbar_backVisible, false)); mBackTextView.setClickable(true); mBackTextView.setOnClickListener(this); Toolbar.LayoutParams layoutParams = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT, Gravity.LEFT | Gravity.CENTER_VERTICAL); layoutParams.rightMargin = typedArray.getDimensionPixelSize( R.styleable.TitleToolbar_backMarginRight, dp2px(DEFAULT_BACK_MARGIN_RIGHT)); addView(mBackTextView, layoutParams); } if (!isChild(mCloseTextView)) { mCloseTextView = new TextView(context); mCloseTextView.setId(R.id.title_toolbar_close); mCloseTextView.setSingleLine(); mCloseTextView.setEllipsize(TextUtils.TruncateAt.END); mCloseTextView.setGravity(Gravity.CENTER_VERTICAL); int closeTextAppearance = typedArray.getResourceId(R.styleable.TitleToolbar_closeTextAppearance, 0); if (closeTextAppearance != 0) { mCloseTextView.setTextAppearance(context, closeTextAppearance); } if (typedArray.hasValue(R.styleable.TitleToolbar_closeTextColor)) { int closeTextColor = typedArray.getColor(R.styleable.TitleToolbar_closeTextColor, Color.WHITE); mCloseTextView.setTextColor(closeTextColor); } if (typedArray.hasValue(R.styleable.TitleToolbar_closeTextSize)) { mCloseTextView.setTextSize( typedArray.getDimensionPixelSize( R.styleable.TitleToolbar_closeTextSize, 0)); } setCloseText(typedArray.getText(R.styleable.TitleToolbar_closeText)); setCloseVisible(typedArray.getBoolean(R.styleable.TitleToolbar_closeVisible, false)); mCloseTextView.setClickable(true); mCloseTextView.setOnClickListener(this); addView(mCloseTextView, new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT, Gravity.LEFT | Gravity.CENTER_VERTICAL)); } typedArray.recycle(); a.recycle(); } @Override public CharSequence getTitle() { return mTitleText; } @Override public void setTitle(CharSequence title) { mTitleText = title; if (mTitleTextView != null) { mTitleTextView.setText(title); } } @Override public void setTitleTextAppearance(Context context, int resId) { if (mTitleTextView != null) { mTitleTextView.setTextAppearance(context, resId); } } @Override public void setTitleTextColor(int color) { if (mTitleTextView != null) { mTitleTextView.setTextColor(color); } } public boolean getTitleVisible() { return mTitleVisible; } public void setTitleVisible(boolean visible) { mTitleVisible = visible; mTitleTextView.setVisibility(mTitleVisible ? VISIBLE : GONE); } @Override public CharSequence getSubtitle() { return mSubTitleText; } @Override public void setSubtitle(CharSequence subtitle) { mSubTitleText = subtitle; if (mSubtitleTextView != null) { mSubtitleTextView.setText(subtitle); } } @Override public void setSubtitleTextAppearance(Context context, int resId) { if (mSubtitleTextView != null) { mSubtitleTextView.setTextAppearance(context, resId); } } @Override public void setSubtitleTextColor(int color) { if (mSubtitleTextView != null) { mSubtitleTextView.setTextColor(color); } } public boolean getSubtitleVisible() { return mSubTitleVisible; } public void setSubtitleVisible(boolean visible) { mSubTitleVisible = visible; mSubtitleTextView.setVisibility(visible ? VISIBLE : GONE); } public void setCloseText(int resId) { setCloseText(getContext().getText(resId)); } public CharSequence getCloseText() { return mCloseText; } public void setCloseText(CharSequence closeText) { mCloseText = closeText; if (mCloseTextView != null) { mCloseTextView.setText(closeText); } } public void setCloseTextColor(int color) { mCloseTextView.setTextColor(color); } public boolean isCloseVisible() { return mCloseVisible; } public void setCloseVisible(boolean visible) { mCloseVisible = visible; mCloseTextView.setVisibility(mCloseVisible ? VISIBLE : GONE); } public void setBackText(int resId) { setBackText(getContext().getText(resId)); } public CharSequence getBackText() { return mBackText; } public void setBackText(CharSequence backText) { mBackText = backText; if (mBackTextView != null) { mBackTextView.setText(backText); } } public void setBackTextColor(int color) { mBackTextView.setTextColor(color); } public boolean isBackVisible() { return mBackVisible; } public void setBackVisible(boolean visible) { mBackVisible = visible; mBackTextView.setVisibility(mBackVisible ? VISIBLE : GONE); } @Override public void onClick(View v) { if (mOnOptionItemClickListener != null) { mOnOptionItemClickListener.onOptionItemClick(v); } } }