近期在尝试一款RF手持终端的开发任务,由于系统版本要求,打算采用自定义topbar来作为导航栏,当然v7包里有更好的toolbar可供使用,这里简单做一下示例,仅供参考。
上代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
>
<LinearLayout
android:id="@+id/ll_back"
android:layout_width="40dp"
android:layout_height="?attr/actionBarSize"
android:gravity="center"
>
<ImageView
android:id="@+id/iv_back"
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/left_back" />
</LinearLayout>
<TextView
android:id="@+id/tv_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/ll_back"
android:layout_centerVertical="true"
android:maxLength="4"
android:textColor="@color/background_light"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:maxLength="6"
android:textColor="@color/background_light"
android:textSize="16sp"
/>
<TextView
android:id="@+id/tv_rightSecond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/tv_rightMost"
android:layout_marginRight="10dp"
android:maxLength="6"
android:textColor="@color/background_light"
android:textSize="16sp"
/>
<TextView
android:id="@+id/tv_rightMost"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:maxLength="5"
android:textColor="@color/background_light"
android:layout_marginRight="10dp"
android:layout_alignParentRight="true"
android:textSize="16sp"
/>
</RelativeLayout>
public class CustomTitle extends RelativeLayout {
private LayoutInflater inflater;
private View mView;
private TextView tv_left;
private TextView tv_center;
private TextView tv_rightMost;
private TextView tv_rightSecond;
private LinearLayout ll_back;
private ImageView iv_back;
private CustomTitle.CustomToolbarListener listener;
public CustomTitle(Context context) {
super(context);
}
public CustomTitle(Context context, AttributeSet attrs) {
super(context, attrs);
init();
initListener();
}
public CustomTitle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void init() {
if (mView == null) {
inflater = LayoutInflater.from(getContext());
mView = inflater.inflate(R.layout.toolbar_custom, null);
tv_left = (TextView) mView.findViewById(R.id.tv_left);
tv_center = (TextView) mView.findViewById(R.id.tv_center);
tv_rightMost = (TextView) mView.findViewById(R.id.tv_rightMost);
tv_rightSecond = (TextView) mView.findViewById(R.id.tv_rightSecond);
ll_back = (LinearLayout) mView.findViewById(R.id.ll_back);
iv_back = (ImageView) mView.findViewById(R.id.iv_back);
//使用LayoutParams把控件添加到子view中
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
addView(mView, lp);
}
}
private void initListener() {
ll_back.setOnClickListener(v -> listener.back(null));
}
public void setBackListener(CustomTitle.CustomToolbarListener backListener) {
this.listener = backListener;
}
public void setTitle(CharSequence title) {
if (tv_center != null) {
if (!TextUtils.isEmpty(title)) {
tv_center.setVisibility(VISIBLE);
tv_center.setText(title);
} else {
tv_center.setVisibility(GONE);
}
}
}
public void setTvLeft(String tvLeft) {
if (!TextUtils.isEmpty(tvLeft)) {
tv_left.setVisibility(VISIBLE);
tv_left.setText(tvLeft);
} else {
tv_left.setVisibility(GONE);
}
}
public void setTvRightMost(String tvRightMost) {
if (!TextUtils.isEmpty(tvRightMost)) {
tv_rightMost.setVisibility(VISIBLE);
tv_rightMost.setText(tvRightMost);
} else {
tv_rightMost.setVisibility(GONE);
}
}
public void setTvRightSecond(String tvRightSecond) {
if (!TextUtils.isEmpty(tvRightSecond)) {
tv_rightSecond.setVisibility(VISIBLE);
tv_rightSecond.setText(tvRightSecond);
} else {
tv_rightSecond.setVisibility(GONE);
}
}
public interface CustomToolbarListener<T> {
void back(T t);
}
}