Android标题栏的封装TitleBar
来源:互联网 发布:javascript pop() 编辑:程序博客网 时间:2024/05/06 21:16
在开发中,如果我们不想要系统的标题栏,而是想要自己定义状态栏的话,就需要自定义布局,或者,每写一个activity,其对应的页面就要写一次标题栏的布局,那么,而且还要在activity中设置标题栏的值。
那为什么不把设置值封装一下,动态的去设置标题栏上的内容。
标题栏无非就是返回按钮,标题,还有右侧的选项,那么,我们先来写一个布局,高度我们给60dp,里面有什么呢:
1. 返回按钮 2. 返回按钮后面的文字(有时候不需要) 3. 标题 4. 右侧的图标或者文字
如果不是特殊情况需要增加别的东西,就是这么多了;
来看一下布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll_title_bar" android:paddingTop="10dp" android:background="@color/bg_color2" android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="60dp"> <RelativeLayout android:id="@+id/rl_title_bar" android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="match_parent"> //返回箭头 <ImageView android:id="@+id/iv_left_icon" android:layout_centerVertical="true" android:scaleType="centerCrop" android:src="@drawable/ic_back_selector" android:layout_width="11dp" android:layout_height="22dp" /> //标题 <TextView android:id="@+id/tv_title_middle" android:textSize="@dimen/scu_tv_size3" android:textColor="@color/btn_blue" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> //右侧图标 <ImageView android:visibility="gone" android:layout_centerVertical="true" android:id="@+id/iv_rightIco" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> //右侧文字 <TextView android:visibility="gone" android:id="@+id/tv_title_right" android:textSize="@dimen/scu_tv_size3" android:gravity="center_vertical" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="match_parent" /> </RelativeLayout></LinearLayout>
布局里面含有:左边的返回箭头,中间的标题,右侧图标和文字(二者同时出现其中一个).
布局写好了,那么在activity中如何使用呢,如果按照一贯的写法,肯定每个activity中都要写繁琐的设置标题栏代码,那就封装一下:
public class TitleBar { /** * 左侧/右侧图标和中间标题 */ private View titleView; /** * 左侧/右侧图标和中间标题 */ private RelativeLayout rl_title_bar; /** * 跟布局 */ private LinearLayout ll_title_bar; /** * 左侧图标 */ private ImageView iv_left_icon; /** * 右侧图标 */ private ImageView iv_rightIco; /** * 中间标题 */ private TextView tv_title_middle; /** * 右侧标题 */ private TextView tv_title_right; /** * 构造方法:用于获取对象 * */ public TitleBar(Activity context){ titleView = context.findViewById(R.id.rl_title_bar); rl_title_bar = (RelativeLayout)titleView.findViewById(R.id.rl_title_bar); ll_title_bar = (LinearLayout) context.findViewById(R.id.ll_title_bar); tv_title_middle = (TextView)titleView.findViewById(R.id.tv_title_middle); tv_title_right = (TextView)titleView.findViewById(R.id.tv_title_right); iv_left_icon = (ImageView)titleView.findViewById(R.id.iv_left_icon); iv_rightIco = (ImageView)titleView.findViewById(R.id.iv_rightIco); } /** * 用于设置标题栏文字 * @param titleText 传入要设置的标题 * @return */ public TitleBar setTitleText(String titleText){ if(!StringUtils.isNull(titleText)){ tv_title_middle.setText(titleText); } return this; } /** * 设置标题栏文字颜色 * @return */ public TitleBar setTitleTextColor(){ tv_title_middle.setTextColor(Color.WHITE); return this; } /** * 设置标题栏右边的文字 * @return */ public TitleBar setTitleRight(String rightTitle){ if(!StringUtils.isNull(rightTitle)){ tv_title_right.setVisibility(View.VISIBLE); iv_rightIco.setVisibility(View.GONE); tv_title_right.setTextColor(Color.WHITE); tv_title_right.setText(rightTitle); } return this; } /** * 用于设置标题栏左边要显示的图片 * @param resId 标题栏左边的图标的id,一般为返回图标 * @return */ public TitleBar setLeftIco(int resId){ iv_left_icon.setVisibility(resId > 0 ? View.VISIBLE : View.GONE); iv_left_icon.setImageResource(resId); return this; } /** * 用于设置标题栏右边要显示的图片 * @param resId 标题栏右边的图标id * @return */ public TitleBar setRightIco(int resId){ iv_rightIco.setVisibility(resId > 0 ? View.VISIBLE : View.GONE); iv_rightIco.setImageResource(resId); return this; } /** * 用户设置 标题栏右侧的图标的背景drawable * @param resId drawable的id * @return */ public TitleBar setRightIconBgDr(int resId){ iv_rightIco.setVisibility(resId > 0 ? View.VISIBLE : View.GONE); iv_rightIco.setImageResource(R.drawable.ic_back_selector); return this; } /** * 用于设置标题栏左边图片的单击事件 * @param listener 传入的事件对象 * @return */ public TitleBar setLeftIcoListening(View.OnClickListener listener){ if(iv_left_icon.getVisibility() == View.VISIBLE){ iv_left_icon.setOnClickListener(listener); } return this; } /** * 用于设置标题栏右边图片的单击事件 * @param listener 传入的事件对象 * @return */ public TitleBar setRightIcoListening(View.OnClickListener listener){ if(iv_rightIco.getVisibility() == View.VISIBLE){ iv_rightIco.setOnClickListener(listener); } return this; }}
我们把可能需要的设置,都封装到一个类中,比如设置左边的箭头、设置标题文字、设置右侧图标和文字。
这样的话,我们在activity中就不需要在找到这个控件,以为已经封装起来了,既然已经封装好了,怎么使用呢:
new TitleBar(this).setLeftIco(R.mipmap.ic_back_white).setTitleText("设置").setTitleRight("右侧").setLeftIcoListening(new View.OnClickListener() { @Override public void onClick(View v) { } }).setRightIcoListening(new View.OnClickListener() { @Override public void onClick(View v) { } });
在activity初始化时,同时初始化标题栏,这样就可以了,别忘了,每个页面都要添加标题栏布局,使用:
<include layout="@layout/ll_toolbar"/>
因为封装的类中要找到每个控件,所以需要标题栏的每个页面中都要添加标题栏布局。
0 0
- Android标题栏的封装TitleBar
- BaseActivity中标题栏TitleBar的封装
- Android:定制Activity的标题栏(Titlebar)
- Android:定制Activity的标题栏(Titlebar)
- 自定义Android标题栏修改TitleBar的布局
- Android开发:定制Activity的标题栏(Titlebar)
- Android开发:定制Activity的标题栏(Titlebar)
- 自定义Android标题栏修改TitleBar的布局
- 自定义Android标题栏TitleBar
- Android 自定义标题栏 TitleBar
- 自定义Android标题栏TitleBar布局
- 自定义Android 标题栏TitleBar布局
- 自定义Android标题栏TitleBar布局
- Android标题栏TitleBar全攻略
- Android - 自定义标题栏(TitleBar)
- 自定义Android标题栏TitleBar布局
- 转:自定义Android标题栏TitleBar
- 自定义Android 标题栏TitleBar布局
- APK用命令行签名
- 数组、List和ArrayList的区别
- docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面
- unity中向xml添加对象信息
- jsp页面使用fn函数将搜索关键字变为红色
- Android标题栏的封装TitleBar
- Maven引入自定义jar包
- mysql 慢查询日志分析
- java语言String这个神奇的类为什么是final
- 八大爬虫采集器
- 解决spring mvc JSON 无法转换对象为json格式 无限死循环
- laravel model层建立(以及控制器调用)
- java.lang.UnsupportedOperationException: Can't write to a readonly object
- 蓝桥杯 煤球数目