Android NavagationBar自定义实现
来源:互联网 发布:91视频解析网站源码 编辑:程序博客网 时间:2024/04/30 13:46
最近在写公司的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 stubsm = 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() {@Overridepublic void onClick(View v) {mWebView.removeAllViews();finish();overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);}});navigateBar.setOnRightButtonClickListener(new OnClickListener() {@Overridepublic 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源码,里边有我写的详细的注释,很容易就能看懂,,,有不好地方请各位指出,共同进步,
0 0
- Android NavagationBar自定义实现
- iphone ios navagationbar navigationItem 顶部如何实现下拉框 dropdownlist
- 简单方法实现NavagationBar从透明到显示
- Android实现自定义菜单
- android实现自定义标题栏
- android自定义控件实现
- Android自定义View实现
- android 自定义progressDialog实现
- android 自定义progressDialog实现
- Android 实现自定义Spinner
- Android 自定义progressDialog实现
- Android 自定义SeekBarPreference实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android自定义字体实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义Toast实现
- 《移动APP测试实战》
- Google 发布 Android 性能优化典范
- BZOJ 1001 狼抓兔子
- 【java】五子棋小游戏
- ValidForm的使用
- Android NavagationBar自定义实现
- 关于weak
- 怎样能很好的将ppt转成pdf格式文件
- 网上如何充值地铁卡?
- SQL游标的使用及实例
- 调试小提示:flash 调试界面让断点再来一次
- shell中临时使用其他用户执行命令
- BZOJ 1010 玩具装箱
- SecureCRT 终端的中文显示乱码问题