Android NavagationBar自定义实现

最近在写公司的Android快速开发框架,一直想着把头部标题栏的NavagationBar进行封装,所以自己写了一套头部NavagationBar的封装代码:先上图:



package com.wuzhou.corner.widget;

import com.wuzhou.corner.R.color;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class NavigateBar extends RelativeLayout{

	private Button leftButton;
	private TextView leftText;
	private TextView titleText;
	private Button rightButton;
	private TextView rightText;
	/**
	 * leftLinearLayout显示
	 */
	public final static int LEFT_LINEAR_VISIBILITY = 1; 
	/**
	 * leftLinearLayout不显示
	 */
	public final static int LEFT_LINEAR_INVISIBILITY = 2; 
	/**
	 * leftButton显示并且leftText不显示
	 */
	public final static int LEFT_BUTTON_VISIBILITY = 3; 
	/**
	 * leftText显示并且leftButton不显示
	 */
	public final static int LEFT_TEXT_VISIBILITY = 4;  
	
	/**
	 * rightLinearLayout显示
	 */
	public final static int RIGHT_LINEAR_VISIBILITY = 5; 
	/**
	 * rightLinearLayout不显示
	 */
	public final static int RIGHT_LINEAR_INVISIBILITY = 6; 
	/**
	 * rightButton显示并且rightText不显示
	 */
	public final static int RIGHT_BUTTON_VISIBILITY = 7; 
	/**
	 * rightText显示并且rightButton不显示
	 */
	public final static int RIGHT_TEXT_VISIBILITY = 8; 
	
	
	private RelativeLayout  leftLinearLayout, leftLinearLayout_1;
	private RelativeLayout rightLinearLayout, rightLinearLayout_1;
	private int STANDARD_HEIGTH = 1080;// 标准宽的像素
	private int STANDARD_WITH = 1800;// 标准高的像素+
	
	private SceenMannage sm;
	TypedArray typeA;
//	Typeface tf;
	
	public Button getRightButton() {
		return rightButton;
	}
	public NavigateBar(Context context) {
		this(context, null, 0);
		// TODO Auto-generated constructor stub
		sm = new com.wuzhou.corner.widget.SceenMannage(context);
	}
	public NavigateBar(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
		sm = new SceenMannage(context);
		// TODO Auto-generated constructor stub
	}
	public NavigateBar(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
//		this.setBackgroundResource(resid);   //设置背景颜色
		leftLinearLayout = new RelativeLayout(getContext());
		leftLinearLayout_1 = new RelativeLayout(getContext());
		rightLinearLayout = new RelativeLayout(getContext());
		rightLinearLayout_1 = new RelativeLayout(getContext());
		
		leftButton = new Button(context);
		leftText = new TextView(context);
		titleText = new TextView(context);
		rightButton = new Button(context);
		
		rightText = new TextView(context);
		sm = new SceenMannage(context);
		
//		tf = Typeface.createFromAsset(context.getAssets(), "fonts/yhcy.otf");
		//左边区域
		RelativeLayout.LayoutParams leftLinearLayoutParams = new  RelativeLayout.LayoutParams(setSceemManage(150), ViewGroup.LayoutParams.FILL_PARENT);
		leftLinearLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
		
		RelativeLayout.LayoutParams leftLinearLayoutParams_1 = new  RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.FILL_PARENT);
		leftLinearLayoutParams_1.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
		
		RelativeLayout.LayoutParams leftLayoutParams = new  RelativeLayout.LayoutParams(setSceemManage(50), setSceemManage(50));
		leftLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
		leftButton.setId(1);
		leftLinearLayout_1.addView(leftButton, leftLayoutParams);
		
		RelativeLayout.LayoutParams leftTextLayoutParams = new  RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
		leftTextLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
		leftTextLayoutParams.addRule(RelativeLayout.RIGHT_OF, 1);
		leftText.setId(2); 
		leftLinearLayout_1.addView(leftText, leftTextLayoutParams);
		   
		leftLinearLayout.addView(leftLinearLayout_1, leftLinearLayoutParams_1);
		leftLinearLayout.setBackgroundColor(Color.TRANSPARENT);
		this.addView(leftLinearLayout, leftLinearLayoutParams);
		
		
		
		//中间标题
		RelativeLayout.LayoutParams titleLayoutParams = new  RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
		titleLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
		this.addView(titleText, titleLayoutParams);
		
		
		
		
		
		  //右边区域
		RelativeLayout.LayoutParams rightLinearLayoutParams = new  RelativeLayout.LayoutParams(setSceemManage(150), ViewGroup.LayoutParams.FILL_PARENT);
		rightLinearLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
		
		RelativeLayout.LayoutParams rightLinearLayoutParams_1 = new  RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.FILL_PARENT);
		rightLinearLayoutParams_1.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
		
		RelativeLayout.LayoutParams rightLayoutParams = new  RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
//		rightLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
		rightLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
		//rightLayout.rightMargin = setSceemManage(10);
		rightText.setId(3);
//		rightLayoutParams.rightMargin = setSceemManage(20);
		rightLinearLayout_1.addView(rightText, rightLayoutParams);
		
		
		  
		RelativeLayout.LayoutParams rightTextLayoutParams = new  RelativeLayout.LayoutParams(setSceemManage(50), setSceemManage(50));
//		rightTextLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
		rightTextLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
		//rightLayout.rightMargin = setSceemManage(10);   
//		rightTextLayoutParams.rightMargin = setSceemManage(20);
		rightTextLayoutParams.addRule(RelativeLayout.RIGHT_OF, 3);
		rightButton.setId(4);
		rightLinearLayout_1.addView(rightButton, rightTextLayoutParams);
		  
		rightLinearLayout.addView(rightLinearLayout_1, rightLinearLayoutParams_1);
		
		rightLinearLayout.setBackgroundColor(Color.TRANSPARENT);
		this.addView(rightLinearLayout, rightLinearLayoutParams);
		  
	}
	/**
	 * 屏幕适配
	 * @param currentWidth
	 * @return
	 */
	public int setSceemManage(int currentWidth){
		DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();

		int large = (metrics.widthPixels > metrics.heightPixels) ? metrics.widthPixels
				: metrics.heightPixels;
		return (int) ((large * 1f / STANDARD_WITH)*1.5*currentWidth);
	}

	/**
	 *
	 * 给左边的自定义按钮设置文字
	 * @param text     填充的文字
	 * @param textSize   给填充的文字设置字体大小
	 * @param textColor 给填充的文字设置字体颜色
	 */
	public void setLeftButtonTextMessage(CharSequence text, int textSize, int textColor)
	{
//		leftText.setTypeface(tf);
		leftText.setTextSize(sm.setTextSize(textSize));
		leftText.setTextColor(textColor);
		leftText.setText(text);
	}
	/**
	 * 给最左边的自定义按钮设置图片
	 * @param resid
	 */
	public void setLeftButtonBg(int resid)
	{
		leftButton.setBackgroundResource(resid);
	}
	
	/**
	 * 设置左侧按钮是否显示
	 * LEFT_LINEAR_VISIBILITY = 1;  //leftLinearLayout显示
	 * LEFT_LINEAR_INVISIBILITY = 2; //leftLinearLayout不显示
	 *	LEFT_BUTTON_VISIBILITY = 3; //leftButton显示并且leftText不显示
	 *	LEFT_TEXT_VISIBILITY = 4;  //leftText显示并且leftButton不显示
	 * @param isVisibility
	 */
	public void setLeftButtonVisibly(int isVisibility)
	{
		if(isVisibility == LEFT_LINEAR_VISIBILITY){  
			leftLinearLayout.setVisibility(View.VISIBLE);
		}else if(isVisibility == LEFT_LINEAR_INVISIBILITY){
			leftLinearLayout.setVisibility(View.INVISIBLE);
		}else if(isVisibility == LEFT_BUTTON_VISIBILITY){
			leftButton.setVisibility(View.VISIBLE);
			leftText.setVisibility(View.INVISIBLE);
		}else if(isVisibility == LEFT_TEXT_VISIBILITY){
			leftButton.setVisibility(View.GONE);
			leftText.setVisibility(View.VISIBLE);
		}
	}
	
	/**
	 * 给左边的按钮设置监听事件
	 * @param l
	 */
	public void setOnLeftButtonClickListener(OnClickListener l)
	{
		leftButton.setOnClickListener(l);
		leftText.setOnClickListener(l);
		leftLinearLayout.setOnClickListener(l);
		setButtonFocusChanged(leftButton);
	}
	
	/**
	 * 给Title设置标题
	 * @param text
	 */
	public void setTitleTextMessage(CharSequence text, int size, int color)
	{
//		titleText.setTypeface(tf);
		titleText.setTextSize(sm.setTextSize(size));
		titleText.setTextColor(color);
		titleText.setText(text);
	}
	/**
	 * 给中间的按钮设置监听事件
	 * @param l
	 */
	public void setOnTitleButtonClickListener(OnClickListener l)
	{
		titleText.setOnClickListener(l);
	}
	
	/**
	 *
	 * 给右边的自定义按钮设置文字
	 * @param text     填充的文字
	 * @param textSize   给填充的文字设置字体大小
	 * @param textColor 给填充的文字设置字体颜色
	 */
	public void setRightButtonTextMessage(CharSequence text, int textSize, int textColor)
	{
//		rightText.setTypeface(tf);
		rightText.setTextSize(sm.setTextSize(textSize));
		rightText.setTextColor(textColor);
		rightText.setText(text);
	}
	/**
	 * 给最右边的自定义按钮设置图片
	 * @param resid
	 */
	public void setRightButtonBg(int resid)
	{
		rightButton.setBackgroundResource(resid);
	}
	/**
	 * 设置右侧按钮是否显示
	 * RIGHT_LINEAR_VISIBILITY = 5;              //rightLinearLayout显示
	 * RIGHT_LINEAR_INVISIBILITY = 6;         //rightLinearLayout不显示
	 *	RIGHT_BUTTON_VISIBILITY = 7;          //rightButton显示并且leftText不显示
	 *	RIGHT_TEXT_VISIBILITY = 8;                 //rightText显示并且leftButton不显示
	 * @param isVisibility
	 */
	public void setRightButtonVisibly(int isVisibility)
	{
		if(isVisibility == RIGHT_LINEAR_VISIBILITY){  
			rightLinearLayout.setVisibility(View.VISIBLE);
		}else if(isVisibility == RIGHT_LINEAR_INVISIBILITY){
			rightLinearLayout.setVisibility(View.INVISIBLE);
		}else if(isVisibility == RIGHT_BUTTON_VISIBILITY){
			rightButton.setVisibility(View.VISIBLE);
			rightText.setVisibility(View.INVISIBLE);
		}else if(isVisibility == RIGHT_TEXT_VISIBILITY){
			rightButton.setVisibility(View.GONE);
			rightText.setVisibility(View.VISIBLE);
		}
	}
	/**
	 * 给右边的按钮设置监听事件
	 * @param l
	 */
	public void setOnRightButtonClickListener(OnClickListener l)
	{
		rightButton.setOnClickListener(l);
		rightText.setOnClickListener(l);
		rightLinearLayout.setOnClickListener(l);
		setButtonFocusChanged(rightButton);
	}  
	
	
	/**  
	   * 按下这个按钮进行的颜色过滤  
	   */  
	  public final static float[] BT_SELECTED=new float[] {    
	      1, 0, 0, 0, 100,    
	      0, 1, 0, 0, 100,    
	      0, 0, 1, 0, 0,    
	      0, 0, 0, 1, 0 };   
	     
	  /**  
	   * 按钮恢复原状的颜色过滤  
	   */  
	  public final static float[] BT_NOT_SELECTED=new float[] {    
	      1, 0, 0, 0, 0,    
	      0, 1, 0, 0, 0,    
	      0, 0, 1, 0, 0,    
	      0, 0, 0, 1, 0 };   
	     
	  /**  
	   * 按钮焦点改变  
	   */  
	  public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() {   
	     
	  @Override  
	  public void onFocusChange(View v, boolean hasFocus) {   
		  if(v != null){
			  if (hasFocus) {   
//				  v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));   
				  v.getBackground().setColorFilter(color.all_rel_back_or, PorterDuff.Mode.MULTIPLY);
				  v.setBackgroundDrawable(v.getBackground());   
			  }   
			  else  
			  {   
//				  v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));   
				  v.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
				  v.setBackgroundDrawable(v.getBackground());   
			  }   
		  }
	  	}   
	 };   
	    
	  /**  
	   * 按钮触碰按下效果  
	   */  
	 public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() {   
	  @Override      
	  public boolean onTouch(View v, MotionEvent event) {   
		  if(v != null){
			  if(event.getAction() == MotionEvent.ACTION_DOWN){   
//				  v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));   
				  v.getBackground().setColorFilter(color.all_rel_back_or, PorterDuff.Mode.MULTIPLY);
				  v.setBackgroundDrawable(v.getBackground());   
			  }   
			  else if(event.getAction() == MotionEvent.ACTION_UP){   
//				  v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));   
				  v.getBackground().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
				  v.setBackgroundDrawable(v.getBackground());   
			  }   
		  }
		   return false;   
	  	}   
	 };   
	    
	 /**  
	  * 设置图片按钮获取焦点改变状态  
	  * @param inImageButton  
	  */  
	 public final static void setButtonFocusChanged(View inView)   
	 {   
	  inView.setOnTouchListener(buttonOnTouchListener);   
	  inView.setOnFocusChangeListener(buttonOnFocusChangeListener);   
	 }  
	
	
}
代码中有我写的解释,基本上没什么问题,现在就来看具体怎么调用它:

首先我们当然要在我们的XML中注入咱们自定义的NavagationBar:

例如:

   
    <com.wuzhou.corner.widget.NavigateBar
        android:id="@+id/navigateBar"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:background="@color/allpagecolor" />
因为顶部NavagationBar一般在每一个Activity中都能用到,所以为了方便调用,我们写了一个方法,这个方法中将NavagationBar的所有操作都集中起来,在OnCreate方法中调用该方法即可,方便调用:

例如:

@SuppressLint("ResourceAsColor")
private void setNavigateBar(){
	SceenMannage sm = new SceenMannage(getApplicationContext());
	NavigateBar navigateBar = (NavigateBar) this.findViewById(R.id.navigateBar);  
	sm.RelativeLayoutParams(navigateBar, 0, 50, 0, 0, 0, 0);
	
	navigateBar.setLeftButtonBg(R.drawable.selector_navagate_bar_back);
	navigateBar.setLeftButtonTextMessage("西安", 15, Color.rgb(107, 138, 71));
	navigateBar.setLeftButtonVisibly(NavigateBar.LEFT_BUTTON_VISIBILITY);
	
	navigateBar.setTitleTextMessage("详情页", 20, Color.rgb(255, 255, 255));  
	
	navigateBar.setRightButtonTextMessage("分享", 15, Color.rgb(107, 138, 71));
	navigateBar.setRightButtonBg(R.drawable.selector_navagate_bar_share);
	navigateBar.setRightButtonVisibly(NavigateBar.RIGHT_BUTTON_VISIBILITY);
	
	navigateBar.setOnLeftButtonClickListener(new OnClickListener() {
		@Override
		public void onClick(View v) {
			mWebView.removeAllViews();
			finish();
			overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
		}
	});
	navigateBar.setOnRightButtonClickListener(new OnClickListener() {
		@Override
		public void onClick(View v) {
			Toast.makeText(getApplicationContext(), "分享", Toast.LENGTH_SHORT).show();
			showShare();
		}
	});
}



好的,现在方法看到了,我们现在解析代码:
假如我现在要用到


我们改的时候只需要将

<span style="white-space:pre">	</span>navigateBar.setLeftButtonBg(R.drawable.selector_navagate_bar_back);
	navigateBar.setLeftButtonTextMessage(“空”,15,Color.rgb(107,138,71));
	navigateBar.setLeftButtonVisibly(NavigateBar.LEFT_BUTTON_VISIBILITY);
	
	navigateBar.setTitleTextMessage(“详情页”,20,Color.rgb(255,255,255));  
	
	navigateBar.setRightButtonTextMessage(“空”,15,Color.rgb(107,138,71));
	navigateBar.setRightButtonBg(R.drawable.selector_navagate_bar_share);
	navigateBar.setRightButtonVisibly(NavigateBar.RIGHT_BUTTON_VISIBILITY);


假如我们要用到


我们改的时候只需要将

<span style="white-space:pre">	</span>navigateBar.setLeftButtonBg(R.drawable.selector_navagate_bar_back);
	navigateBar.setLeftButtonTextMessage(“空”,15,Color.rgb(107,138,71));
	navigateBar.setLeftButtonVisibly(NavigateBar.LEFT_BUTTON_VISIBILITY);
	
	navigateBar.setTitleTextMessage(“详情页”,20,Color.rgb(255,255,255));  
	
	navigateBar.setRightButtonTextMessage(“完成”,15,Color.rgb(107,138,71));
	navigateBar.setRightButtonBg(R.drawable.selector_navagate_bar_share);
	navigateBar.setRightButtonVisibly(NavigateBar.RIGHT_TEXT_VISIBILITY);
好了,简单调用就到这里了,具体根据你们的实际调用的时候可以查看NavagationBar源码,里边有我写的详细的注释,很容易就能看懂,,,有不好地方请各位指出,共同进步,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值