关于自定义标题栏,已经有很多前辈有很多成熟的解决方法。作为初入此行的我也是经过无数次的尝试和学习,得出了一下的心得感悟,希望可以帮助到还在这条道上摸索前行的童鞋们。
要使用自定用标题栏,首先得屏蔽系统的标题栏,在这儿我提供两种屏蔽系统标题栏的方法:
1、在代码中,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
<span style="background-color: rgb(51, 255, 51);">requestWindowFeature(Window.FEATURE_NO_TITLE);//记住一定要放在setContentView()前面
</span> setContentView(R.layout.activity_main);
}
2、在文件清单中,这样可以将整个应用设置成无标题栏的状态
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
<span style="background-color: rgb(51, 255, 51);">android:theme="@android:style/Theme.NoTitleBar" </span> >
去掉系统的标题栏之后,先自定义一个TitleBar让其继承RelativeLayout
package com.zyd.titlebar.custom;
import com.zyd.titlebar.R;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
@SuppressLint("NewApi")
public class TitleBar extends RelativeLayout {
private TextView leftTv,titleTv,rightTv;
private View titleView;
private String titleText,leftText,rightText;
private int titleTxtColor,leftTxtColor,rightTxtColor;
private Drawable leftBG,rightBG;
private TitleBarClickListener titleBarClickListener;
public TitleBar(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.title_bar);
titleText=array.getString(R.styleable.title_bar_title_text);
leftText=array.getString(R.styleable.title_bar_left_text);
rightText=array.getString(R.styleable.title_bar_right_text);
titleTxtColor=array.getColor(R.styleable.title_bar_title_text_color, 0);
leftTxtColor=array.getColor(R.styleable.title_bar_left_text_color, 0);
rightTxtColor=array.getColor(R.styleable.title_bar_right_text_color, 0);
leftBG=array.getDrawable(R.styleable.title_bar_left_background);
rightBG=array.getDrawable(R.styleable.title_bar_right_background);
titleView=inflate(context, R.layout.title_bar, null);
leftTv=(TextView) titleView.findViewById(R.id.left_tv);
rightTv=(TextView) titleView.findViewById(R.id.right_tv);
titleTv=(TextView) titleView.findViewById(R.id.title_tv);
leftTv.setText(leftText);
leftTv.setTextColor(leftTxtColor);
leftTv.setBackground(leftBG);
rightTv.setText(rightText);
rightTv.setTextColor(rightTxtColor);
rightTv.setBackground(rightBG);
titleTv.setText(titleText);
titleTv.setTextColor(titleTxtColor);
addView(titleView);
leftTv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (titleBarClickListener!=null) {
titleBarClickListener.leftClick();
}
}
});
rightTv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (titleBarClickListener!=null) {
titleBarClickListener.rightClick();
}
}
});
}
public void setTopBarClickListener(TitleBarClickListener titleBarClickListener){
this.titleBarClickListener=titleBarClickListener;
}
public String getTitleText() {
return titleText;
}
public void setTitleText(String titleText) {
this.titleText = titleText;
titleTv.setText(titleText);
}
public String getLeftText() {
return leftText;
}
public void setLeftText(String leftText) {
this.leftText = leftText;
leftTv.setText(leftText);
}
public String getRightText() {
return rightText;
}
public void setRightText(String rightText) {
this.rightText = rightText;
rightTv.setText(rightText);
}
public int getTitleTxtColor() {
return titleTxtColor;
}
public void setTitleTxtColor(int titleTxtColor) {
this.titleTxtColor = titleTxtColor;
titleTv.setTextColor(titleTxtColor);
}
public int getLeftTxtColor() {
return leftTxtColor;
}
public void setLeftTxtColor(int leftTxtColor) {
this.leftTxtColor = leftTxtColor;
leftTv.setTextColor(leftTxtColor);
}
public int getRightTxtColor() {
return rightTxtColor;
}
public void setRightTxtColor(int rightTxtColor) {
this.rightTxtColor = rightTxtColor;
rightTv.setTextColor(rightTxtColor);
}
public Drawable getLeftBG() {
return leftBG;
}
public void setLeftBG(Drawable leftBG) {
this.leftBG = leftBG;
leftTv.setBackground(leftBG);
}
public Drawable getRightBG() {
return rightBG;
}
public void setRightBG(Drawable rightBG) {
this.rightBG = rightBG;
rightTv.setBackground(rightBG);
}
public interface TitleBarClickListener{
void leftClick();
void rightClick();
}
}
再在布局文件里实现布局,title_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100px" >
<TextView
android:id="@+id/left_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:textSize="18sp" />
<TextView
android:id="@+id/title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="20sp" />
<TextView
android:id="@+id/right_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:textSize="18sp" />
</RelativeLayout>
</LinearLayout>
这样标题栏的自定义布局就实现了,要想使用可以直接使用这个自定义布局。
有需要源码的,请点击源码下载