我先上xml:<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/title_height">
android:id="@+id/baselayout_iv_left"
android:layout_width="wrap_content"
android:layout_centerVertical="true"
android:scaleType="center"
style="@style/title_bar_common_style"
android:class="lazyload" src="https://img-blog.csdnimg.cn/2022010612595075722.png" data-original="@drawable/nav_btn_back" />
android:id="@+id/baselayout_tv_title"
android:layout_centerInParent="true"
android:gravity="center"
android:singleLine="true"
android:maxWidth="240dip"
android:text="@string/app_name"
style="@style/title_bar_common_style"
android:textColor="@color/white_a"
android:textSize="@dimen/text_size_20" />
android:id="@+id/baselayout_iv_right"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:scaleType="center"
style="@style/title_bar_common_style"
tools:visibility="visible"
android:visibility="gone" />
android:id="@+id/baselayout_tv_left"
android:gravity="center"
android:maxWidth="240dip"
android:singleLine="true"
style="@style/title_bar_common_style"
android:textColor="@color/white_a"
android:textSize="@dimen/text_size_16"
android:visibility="gone"
tools:visibility="visible"/>
android:id="@+id/baselayout_tv_right_yunqi"
android:layout_alignParentRight="true"
android:gravity="right|center_vertical"
android:maxWidth="240dip"
android:singleLine="true"
style="@style/title_bar_common_style"
android:textColor="@color/white_a"
android:textSize="@dimen/text_size_16"
android:visibility="visible" />
然后上代码:public class TitleBarCommon extends RelativeLayout {
private TextView mTvTitle, mTvLeft, mTvRight;
private ImageView mIvLeft, mIvRight;
private View mTitleContainer;
private Context context;
public TitleBarCommon(Context context) {
this(context, null);
}
public TitleBarCommon(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
this.mTitleContainer = LayoutInflater.from(context).inflate( R.layout.activity_base_header_common, this,true);
init();
}
public void init() {
mTvTitle = (TextView) mTitleContainer.findViewById(R.id.baselayout_tv_title);
mIvLeft = (ImageView) mTitleContainer.findViewById(R.id.baselayout_iv_left);
mTvLeft = (TextView) mTitleContainer.findViewById(R.id.baselayout_tv_left);
mIvRight = (ImageView) mTitleContainer.findViewById(R.id.baselayout_iv_right);
mTvRight = (TextView) mTitleContainer.findViewById(R.id.baselayout_tv_right_yunqi);
}
private LayoutInflater mLayoutInflater;
public void setLayoutInflater(LayoutInflater inflater){
mLayoutInflater = inflater;
}
/**自定义头部**/
public void setCustomTitleBar(int customTitleLayoutId){
if (customTitleLayoutId <=0) {
this.setVisibility(View.GONE);
return ;
}
removeAllViews();
View baseHead;
if(mLayoutInflater!=null){
baseHead = mLayoutInflater.inflate(customTitleLayoutId, null);
}else{
baseHead = View.inflate(context,customTitleLayoutId, null);
}
RelativeLayout.LayoutParams params=new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
addView(baseHead,params);
}
/**自定义头部**/
public void setCustomTitleBar(View baseHead){
if (baseHead == null) {
this.setVisibility(View.GONE);
return ;
}
removeAllViews();
// View baseHead = View.inflate(context,customTitleLayoutId, null);
LayoutParams params=new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
addView(baseHead,params);
}
/**
* 右TextView 文字
*
* @param
* @return
*/
public TitleBarCommon setRightTextViewString(String text) {
if (!TextUtils.isEmpty(text)) {
mTvRight.setText(text);
mTvRight.setVisibility(View.VISIBLE);
} else {
mTvRight.setVisibility(View.GONE);
}
return this;
}
/**
* 设置右TextView点击事件
*
* @param lsnr
* @return
*/
public TitleBarCommon setRightTextViewListener(OnClickListener lsnr) {
mTvRight.setOnClickListener(lsnr);
return this;
}
}
这样使用这个title,我们看一个activity的layout:<?xml version="1.0" encoding="utf-8"?>
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white_a"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
android:id="@+id/head_common_layout"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@color/red_bn"
android:gravity="center_vertical"/>
android:id="@+id/news_home_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@null"
android:fadingEdge="none"
android:footerDividersEnabled="true"
android:listSelector="@color/trans_color"
android:scrollbars="none"
android:scrollingCache="false" />
private void initTitle() {TitleBarCommon titleBarCommon = (TitleBarCommon)findViewById(R.id.head_common_layout);
titleBarCommon.setRightTextViewString("增加");
titleBarCommon.setRightTextViewListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TestHttpActivity.this,"aaa",Toast.LENGTH_LONG).show();
}
});
}
从这个代码可以看出几个有意思的地方,因为这个view本身继承RelateviewLayout,所以根节点为merge,这样可以少一层嵌套
还有看一下方法setCustomTitleBar,这个方法去除了这个view本身的layout,然后可以set自己的layout,就有很大的通用性