在日常开发中,我们的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() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
GetPWDBackActivity.this.finish();
}
});
3.设置右边图片及回调函数处理
<pre name="code" class="java">header.setRightImageViewRes(R.drawable.main_right_selector,
new OnClickListener() {
@Override
public 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.右边也是同理。