公共的标题栏构造器

原创 2016年08月30日 10:03:17

标题栏布局文件,一般包含三部分,左边、中间和右边,左右两边可能是文字,也可能是图片,中间部分是文字。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/common_titlebar"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:background="@color/white"
    android:layout_alignParentTop="true"
    android:orientation="horizontal" >
    
    <RelativeLayout
        android:id="@+id/common_titlebar_iv_left_layout"
        android:layout_width="50dp"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
         >

        <ImageView
           android:id="@+id/common_titlebar_iv_left"
           android:layout_width="30dp"
           android:layout_height="30dp"
           android:src="@drawable/back"
           android:layout_centerInParent="true" />
    </RelativeLayout>

    <TextView
        android:id="@+id/common_titlebar_tv_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:gravity="center_vertical"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:textColor="@color/username_textcolor"
        android:textSize="16sp"
        android:visibility="gone" />

    <TextView
        android:id="@+id/common_titlebar_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:singleLine="true"
        android:ellipsize="end"
        android:gravity="center"
        android:textColor="@color/username_textcolor"
        android:visibility="gone"
        android:textSize="18sp" />
    
    <RelativeLayout
        android:id="@+id/common_titlebar_iv_right_layout"
        android:layout_width="50dp"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:visibility="gone" >

        <ImageView
            android:id="@+id/common_titlebar_iv_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />
    </RelativeLayout>


    <TextView
        android:id="@+id/common_titlebar_tv_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:textColor="@color/username_textcolor"
        android:textSize="16sp"
        android:visibility="gone" />

    <View
        android:id="@+id/common_titlebar_divider"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_alignParentBottom="true"
        android:background="@color/line" />

</RelativeLayout>

Builder设计模式


public class TitleBuilder {

	private View viewTitle;
	private TextView tvTitle;
	private ImageView ivLeft;
	private ImageView ivRight;
	private TextView tvLeft;
	private TextView tvRight;
	private RelativeLayout layoutLeft;
	private RelativeLayout layoutRight;
	private View divider;
	
	private void findView() {
		tvTitle = (TextView) viewTitle.findViewById(R.id.common_titlebar_tv);
		ivLeft = (ImageView) viewTitle.findViewById(R.id.common_titlebar_iv_left);
		ivRight = (ImageView) viewTitle.findViewById(R.id.common_titlebar_iv_right);
		tvLeft = (TextView) viewTitle.findViewById(R.id.common_titlebar_tv_left);
		tvRight = (TextView) viewTitle.findViewById(R.id.common_titlebar_tv_right);
		layoutLeft = (RelativeLayout) viewTitle.findViewById(R.id.common_titlebar_iv_left_layout);
		layoutRight = (RelativeLayout) viewTitle.findViewById(R.id.common_titlebar_iv_right_layout);
		divider = viewTitle.findViewById(R.id.common_titlebar_divider);
	}
	
	public TitleBuilder(Activity context) {
		viewTitle = context.findViewById(R.id.common_titlebar);
		findView();
	}

	public TitleBuilder(View context) {
		viewTitle = context.findViewById(R.id.common_titlebar);
		findView();
	}

	// 设置title背景
	public TitleBuilder setTitleBgRes(int resid) {
		viewTitle.setBackgroundResource(resid);
		return this;
	}

	// 设置title文字
	public TitleBuilder setTitleText(String text) {
		tvTitle.setVisibility(TextUtils.isEmpty(text) ? View.GONE
				: View.VISIBLE);
		tvTitle.setText(text);
		return this;
	}
	
	// 设置title文字颜色
	public TitleBuilder setTitleTextColor(int resid) {
		tvTitle.setTextColor(resid);
		return this;
	}

	//设置left图片资源
	public TitleBuilder setLeftImage(int resId) {
		layoutLeft.setVisibility(resId > 0 ? View.VISIBLE : View.GONE);
		ivLeft.setImageResource(resId);
		return this;
	}

	//设置left文字--如果文字不为空则将左边的图片隐藏
	public TitleBuilder setLeftText(String text) {
		tvLeft.setVisibility(TextUtils.isEmpty(text) ? View.GONE : View.VISIBLE);
		tvLeft.setText(text);
		layoutLeft.setVisibility(TextUtils.isEmpty(text) ? View.VISIBLE : View.GONE);
		return this;
	}
	
	//左边谁显示给谁设置监听器
	public TitleBuilder setLeftOnClickListener(OnClickListener listener) {
		if (layoutLeft.getVisibility() == View.VISIBLE) {
			layoutLeft.setOnClickListener(listener);
		} else if (tvLeft.getVisibility() == View.VISIBLE) {
			tvLeft.setOnClickListener(listener);
		}
		return this;
	}

	//设置right图片资源
	public TitleBuilder setRightImage(int resId) {
		layoutRight.setVisibility(resId > 0 ? View.VISIBLE : View.GONE);
		ivRight.setImageResource(resId);
		return this;
	}

	//设置right文字
	public TitleBuilder setRightText(String text) {
		tvRight.setVisibility(TextUtils.isEmpty(text) ? View.GONE : View.VISIBLE);
		tvRight.setText(text);
		return this;
	}
	
	//设置分割线是否显示
	public TitleBuilder setDividerVisibility(int visibility) {
		divider.setVisibility(visibility);
		return this;
	}
	
	//右边谁显示给谁设置监听器
	public TitleBuilder setRightOnClickListener(OnClickListener listener) {
		if (layoutRight.getVisibility() == View.VISIBLE) {
			layoutRight.setOnClickListener(listener);
		} else if (tvRight.getVisibility() == View.VISIBLE) {
			tvRight.setOnClickListener(listener);
		}
		return this;
	}

	public View build() {
		return viewTitle;
	}

}


标题栏的公共抽取

一、情形描述        在常使用的页面布局中,为保持用户一贯的使用风格,会保持页面的整体风格相似。除开底部导航外,标题栏是使用频率较高的另一种页面布局。如图所示:           ...

全屏游戏标题栏查看器源码

  • 2011年05月03日 19:04
  • 13KB
  • 下载

Java入门理解构造器

  • 2012年11月05日 20:44
  • 5KB
  • 下载

.创建一个窗口程序(JFrame),标题栏起名为“浏览器”,有一个菜单条,有“文件”、“编辑”、“查看”3个菜单。“文件”菜单有两个菜单项,一项是“打开”,一项是“保存”,“打开”项做成子菜单,有两个

import javax.swing.*; public class Example { public static void main(String[] args) { Window win=...

对象和构造器

  • 2013年07月26日 11:33
  • 21KB
  • 下载

Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)

在进行UI设计时,我们经常需要将屏幕设置成无标题栏或者全屏。要实现起来也非常简单,主要有两种方法:配置xml文件和编写代码设置。 1.在xml文件中进行配置 在项目的清单文件Andro...

Sun 报表构造器指南

  • 2011年04月23日 11:20
  • 682KB
  • 下载

模拟Material design实现可伸缩标题栏

开发项目需求,需要写一个可伸缩的头部。本来打算直接使用Material支持库来实现效果,Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:公共的标题栏构造器
举报原因:
原因补充:

(最多只允许输入30个字)