android 页面标题栏公用控件

来源:互联网 发布:csgo 电击枪 知乎 编辑:程序博客网 时间:2024/05/16 06:26

在日常开发中,我们的XML布局文件的头部大多数都是相同或类似的。我们正常的业务开发,只需要中间“正文内容”一个布局,最终却成了这种情况,必须是大多数布局文件中都得copy这么一大段。

所以这里提供了一个公用的标题栏控件,贴上代码吧:

package qtt.cellcom.com.cn.widget;import android.content.Context;import android.graphics.Color;import android.util.AttributeSet;import android.view.View;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView;/** * 页面标题栏公用控件 */public class Header extends RelativeLayout {        public Header(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        init();    }    public Header(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }        public Header(Context context) {        super(context);        init();    }        private void init() {         int p = (int) (getResources().getDisplayMetrics().density * 10);         setPadding(p, 0, p, 0);    }    public void setBackgroundColor(int color){setBackgroundColor(color);    }        public void setTitle(String text) {        TextView tv = new TextView(getContext());        tv.setTextSize(22);        tv.setTextColor(Color.WHITE);        tv.setText(text);        tv.getPaint().setFakeBoldText(true);        setTitleView(tv);    }        public void setTitleView(View view) {        RelativeLayout.LayoutParams viewLp = new RelativeLayout.LayoutParams(-2, -2);        viewLp.addRule(RelativeLayout.CENTER_IN_PARENT);        addView(view, viewLp);    }        public void setRightView(View view, OnClickListener listener) {        RelativeLayout.LayoutParams ivLp = new RelativeLayout.LayoutParams(-2, -2);        ivLp.addRule(RelativeLayout.CENTER_VERTICAL);        ivLp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);        addView(view, ivLp);        view.setOnClickListener(listener);    }    public void setRightImageViewRes(int res, OnClickListener listener) {        ImageView iv = new ImageView(getContext());        iv.setImageResource(res);        setRightView(iv, listener);    }        public void setLeftView(View view, OnClickListener listener) {        RelativeLayout.LayoutParams ivLp = new RelativeLayout.LayoutParams(-2, -2);        ivLp.addRule(RelativeLayout.CENTER_VERTICAL);        ivLp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);        addView(view, ivLp);        view.setOnClickListener(listener);    }        public void setLeftImageVewRes(int res, OnClickListener listener) {        ImageView iv = new ImageView(getContext());        iv.setImageResource(res);        setLeftView(iv, listener);    }    }
1.设置标题
<pre name="code" class="java">header.setTitle(getResources().getString(R.string.getpwdback_title));
2.设置左边返回键及回调函数处理
<pre name="code" class="java">header.setLeftImageVewRes(R.drawable.head_left_return,new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubGetPWDBackActivity.this.finish();}});
3.设置右边图片及回调函数处理

<pre name="code" class="java">header.setRightImageViewRes(R.drawable.main_right_selector,new OnClickListener() {@Overridepublic void onClick(View v) {OpenActivity(MapZyActivity.class);}});
那如果左边有多个图标或有图标及文字那该如何处理呢?
1.通过自定义view来实现
<pre name="code" class="java">View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.ctrl_main_header_leftview, null);    headerView.setLeftView(view, new OnClickListener() {      @Override      public void onClick(View v) {        showCitySelector();      }    });
2.右边也是同理。









0 0
原创粉丝点击