最近手上在同时做两个项目,有点疲于奔命,博客都无暇顾及;
但是也得出一个心得:做一个项目,首先要审视UI给你的图和后台给你的需求,找到复用之处,这是快速开发的第一步。
所以TitleView能不封装吗?
我的A项目的title(仿微信的title)
B项目的title
所以只需要简单封装下返回的按键就可以了
至于title name,可以采用注解,免去几行代码,进行优雅的声明,如下所示:
全部代码
java
public class TitleView extends LinearLayout { private Context context; public TitleView(Context context) { super(context); init(); } public TitleView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); this.context = context; init(); } public TitleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { ViewGroup rootView = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.title, this, true); View backIcon = MyUtils.getChildAt(rootView, 0, 0); View backText = MyUtils.getChildAt(rootView, 0, 1); TextView tvTitle = (TextView) MyUtils.getChildAt(rootView, 0, 2); //活动finish监听 View.OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { ((Activity)context).finish(); } }; backIcon.setOnClickListener(onClickListener); backText.setOnClickListener(onClickListener); //注解搜寻title String titleName = context.getClass().getAnnotation(TitleName.class).titleName(); tvTitle.setText(titleName); } }
xml
<?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="40dp" xmlns:tools="http://schemas.android.com/tools" android:background="#686f78"> <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_marginStart="4dp" android:layout_gravity="center_vertical" android:background="@drawable/title_back" android:layout_centerVertical="true"/> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:textColor="#FFFFFF" android:layout_marginStart="21dp" android:layout_gravity="center_vertical" android:text="返回" /> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" tools:text="选择小区" android:textColor="#FFFFFF" /> </FrameLayout>
还有一个心得,就是常用的颜色要放到colors里,距离要放到dimen里,因为一个UI的风格是固定的,他认为好看的颜色和间距,其颜色代码和间隔距离都是一样的。
最后补充一点,如果右上角还有控件,比如加号什么的,你有3个方法去做:
1.addView,设置一定的布局参数,代码量相比最大
2.本来就放在那里,只是进行隐藏,代码量最小,但是也意味着每个应用这个标题的容器都具有这个控件
3.放一个view stub在那里,代码量适中,但是解决了第二条的那个缺点
最后再补充一点,如果点击返回后面你还有另外的操作咋办?
来个代理模式?来个jdk1.8后的新特性传递方法?
小老板,生命周期可以用起来了,有无数个方法你可以重写的。