这段时间比较闲,整理了下自己以前的自定义标题栏,比较简单,如有更好的写法,欢迎批评指教。
样式如下:
1.布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/top_tab_height"
android:background="@color/c_ff"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:drawableLeft="@drawable/back_blue"
android:drawablePadding="@dimen/dp_6"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="@string/back"
android:textColor="@color/c_0042ff"
android:textSize="@dimen/dp_14" />
<TextView
android:textStyle="bold"
android:id="@+id/include_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="end"
android:maxEms="12"
android:singleLine="true"
android:textColor="@color/f_33"
android:textSize="18dp" />
<TextView
android:id="@+id/tv_right"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:gravity="center"
android:padding="10dp"
android:textSize="16dp" />
<ImageView
android:id="@+id/img_right"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_gravity="right"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:visibility="gone" />
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_gravity="bottom"
android:background="@color/c_e5" />
</FrameLayout>
2.自定义代码
/**
* @author J.query
* @date 2016/5/24
* @email [email protected]
*/
public class TopTitleBar extends LinearLayout {
private TextView mLeftTv;
private TextView mRightTv;
private ImageView mRightImg;
public TopTitleBar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.include_title, this, true);
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Top_title);
boolean mShowLeft = a.getBoolean(R.styleable.Top_title_showLeft, true);
mLeftTv = (TextView) findViewById(R.id.tv_back);
if (!mShowLeft) {
mLeftTv.setVisibility(GONE);
}
String rightStr = a.getString(R.styleable.Top_title_rightTitle);
mRightTv = (TextView) findViewById(R.id.tv_right);
if (rightStr != null) {
mRightTv.setText(rightStr);
}
String mTitle = a.getString(R.styleable.Top_title_title);
TextView mTvTitle = (TextView) findViewById(R.id.include_tv);
if (mTitle != null) {
mTvTitle.setText(mTitle);
}
int mResourceId = a.getResourceId(R.styleable.Top_title_rightRes, -1);
mRightImg = (ImageView) findViewById(R.id.img_right);
if (mResourceId != -1) {
mRightImg.setVisibility(VISIBLE);
mRightImg.setImageResource(mResourceId);
}
a.recycle();
}
public void setLeftVisible(boolean b) {
if (mLeftTv != null)
mLeftTv.setVisibility(b ? VISIBLE : GONE);
}
public void setRightTvVisible(boolean b) {
if (mRightTv != null)
mRightTv.setVisibility(b ? VISIBLE : GONE);
}
public void setRightVisible(boolean b) {
if (mRightImg != null)
mRightImg.setVisibility(b ? VISIBLE : GONE);
}
}
3. attrs.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Top_title">
<attr name="title" format="string" />
<attr name="rightTitle" format="string" />
<attr name="showLeft" format="boolean" />
<attr name="rightRes" format="reference" />
</declare-styleable>
</resources>
4.使用方式
布局文件使用示例:
<.......widgets.TopTitleBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="标题" />
Activity使用示例:
我是把他集成到BaseActivity里面的,避免重复的写返回键
public void setTitle(String title) {
TextView tvTitle = (TextView) findViewById(R.id.include_tv);
tvTitle.setText(title);
findViewById(R.id.tv_back).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}