(转)Android开发之封装标题栏

文章转自 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构造类中的方法来实现自己满意的效果,在这里就不一一列举了

 

原文地址:https://www.cnblogs.com/1925yiyi/p/7488415.html