Android 封装标题栏

写在前面:

            标题栏这个部分,绝大多数App都有,起到一个概括本页面功能的作用,有些标题栏还具有返回上一页等额外功能。

            在这里不得不表扬一下苹果的标题栏位设计,简洁美观实用,很有借鉴性

            

            一、项目结构

            

           主要由一个布局文件activity_title.xml和一个构造类TitleBuilder.java组成,布局文件定义标题栏样式,构造类负责设定文字内容,是否显示返回按钮等等。    

   

   二、代码设计    

           activity_title.xml 由一个绝对布局包裹两个图片控件和一个文本框控件组成

           此处使用线性布局嵌套绝对布局,使内容可以更好地居中显示

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<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构造类中的方法来实现自己满意的效果,在这里就不一一列举了


  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值