文章转自 CoderAbsolom 的 http://blog.csdn.net/qq_14923661/article/details/52003447
写在前面:
标题栏这个部分,绝大多数App都有,起到一个概括本页面功能的作用,有些标题栏还具有返回上一页等额外功能。
在这里不得不表扬一下苹果的标题栏位设计,简洁美观实用,很有借鉴性
一、项目结构
主要由一个布局文件activity_title.xml和一个构造类TitleBuilder.java组成,布局文件定义标题栏样式,构造类负责设定文字内容,是否显示返回按钮等等。
二、代码设计
activity_title.xml 由一个绝对布局包裹两个图片控件和一个文本框控件组成
此处使用线性布局嵌套绝对布局,使内容可以更好地居中显示
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#1B77A8" android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="50dp"> <RelativeLayout android:id="@+id/title_bar" android:paddingLeft="5dp" android:paddingRight="5dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_centerVertical="true" android:visibility="gone" android:id="@+id/title_leftIco" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/title_text" android:textSize="20sp" android:textColor="#ffffff" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:visibility="gone" android:id="@+id/title_rightIco" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> </LinearLayout>
TitleBuilder.java
/** * Created by PanZhe on 2016/7/22. */ public class TitleBuilder { private View titleView; private RelativeLayout titleBar; private TextView text; private ImageView leftIco; private ImageView rightIco; /** * 构造方法:用于获取对象 * */ public TitleBuilder(Activity context){ titleView = context.findViewById(R.id.title_bar); text = (TextView)titleView.findViewById(R.id.title_text); titleBar = (RelativeLayout)titleView.findViewById(R.id.title_bar); leftIco = (ImageView)titleView.findViewById(R.id.title_leftIco); rightIco = (ImageView)titleView.findViewById(R.id.title_rightIco); } /** * 用于设置标题栏文字 * */ public TitleBuilder setTitleText(String titleText){ if(!TextUtils.isEmpty(titleText)){ text.setText(titleText); } return this; } /** * 用于设置标题栏左边要显示的图片 * */ public TitleBuilder setLeftIco(int resId){ leftIco.setVisibility(resId > 0 ? View.VISIBLE : View.GONE); leftIco.setImageResource(resId); return this; } /** * 用于设置标题栏右边要显示的图片 * */ public TitleBuilder setRightIco(int resId){ rightIco.setVisibility(resId > 0 ? View.VISIBLE : View.GONE); rightIco.setImageResource(resId); return this; } /** * 用于设置标题栏左边图片的单击事件 * */ public TitleBuilder setLeftIcoListening(View.OnClickListener listener){ if(leftIco.getVisibility() == View.VISIBLE){ leftIco.setOnClickListener(listener); } return this; } /** * 用于设置标题栏右边图片的单击事件 * */ public TitleBuilder setRightIcoListening(View.OnClickListener listener){ if(rightIco.getVisibility() == View.VISIBLE){ rightIco.setOnClickListener(listener); } return this; } }
三、使用方法
在需要的地方引入
<include layout="@layout/activity_title"/>
在java代码中使用new方法循环设置参数
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new TitleBuilder(this).setTitleText("测试标题").setLeftIco(R.drawable.left).setLeftIcoListening(leftReturnListener); } private View.OnClickListener leftReturnListener = new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }; }
四、效果图
中规中矩,对不对?
大家可以通过修改TitleBuild构造类中的方法来实现自己满意的效果,在这里就不一一列举了