在app的开发中,每一个页面都有上面的标题栏,总不能在开发的过程中没个界面都写一个标题栏的布局,所以为了开发的方便,将该标题栏进行的封装,以后在实际的开发工作中,也可以将该封装好的标题栏控件直接拿来使用,当然肯定是需要更改里面的布局文件的

下面贴出的是布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="50dp"android:background="#F34B4E"android:gravity="center_vertical" ><LinearLayoutandroid:id="@+id/llLeftGoBack"android:layout_width="wrap_content"android:layout_height="50dp"android:background="@drawable/widget_titlebar_selector"android:clickable="true"android:focusable="true"android:gravity="center_vertical"android:orientation="horizontal"android:paddingLeft="10dp"android:paddingRight="15dp" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="5dp"android:clickable="false"android:drawableLeft="@drawable/myapptitle_back"android:drawablePadding="5dp"android:focusable="false"android:gravity="center"android:text="返回"android:textColor="#FFFFFF"android:textSize="16sp" /></LinearLayout><LinearLayoutandroid:id="@+id/llRight"android:layout_width="wrap_content"android:layout_height="50dp"android:layout_alignParentRight="true"android:background="@drawable/widget_titlebar_selector"android:clickable="true"android:focusable="true"android:orientation="horizontal"android:paddingLeft="15dp"android:paddingRight="15dp" ><ImageViewandroid:id="@+id/ivRightComplete"android:layout_width="wrap_content"android:layout_height="match_parent"android:clickable="false"android:focusable="false"android:visibility="gone" /><TextViewandroid:id="@+id/tvRightComplete"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="5dp"android:clickable="false"android:focusable="false"android:gravity="center"android:text="完成"android:textColor="#FFFFFF"android:textSize="16sp"android:visibility="visible" /></LinearLayout><TextViewandroid:id="@+id/tvCenterTitle"android:layout_width="wrap_content"android:layout_height="50dp"android:layout_toRightOf="@id/llLeftGoBack"android:layout_toLeftOf="@id/llRight"android:ellipsize="end"android:gravity="center"android:singleLine="true"android:text="标题"android:textColor="#FFFFFF"android:textSize="18sp" /></RelativeLayout>

下面是贴出来封装好的类

package com.renrui.job.widget;import com.renrui.job.R;
import com.renrui.job.util.Utility;import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;/*** My app title**/
public class MyAppTitle extends LinearLayout
{private OnLeftButtonClickListener mLeftButtonClickListener;private OnRightButtonClickListener mRightButtonClickListener;private MyViewHolder mViewHolder;private View viewAppTitle;public MyAppTitle(Context context){super(context);init();}public MyAppTitle(Context context, AttributeSet attrs){super(context, attrs);init();}@TargetApi(Build.VERSION_CODES.HONEYCOMB)public MyAppTitle(Context context, AttributeSet attrs, int defStyle){super(context, attrs, defStyle);init();}private void init(){LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);viewAppTitle = inflater.inflate(R.layout.view_activity_titlebar, null);this.addView(viewAppTitle, layoutParams);mViewHolder = new MyViewHolder(this);mViewHolder.llLeftGoBack.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){if (Utility.isFastDoubleClick()){return;}if (mLeftButtonClickListener != null){mLeftButtonClickListener.onLeftButtonClick(v);}}});mViewHolder.llRight.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){if (Utility.isFastDoubleClick()){return;}if (mRightButtonClickListener != null){mRightButtonClickListener.OnRightButtonClick(v);}}});}public void initViewsVisible(boolean isLeftButtonVisile, boolean isCenterTitleVisile, boolean isRightIconVisile, boolean isRightTitleVisile){// 左侧返回mViewHolder.llLeftGoBack.setVisibility(isLeftButtonVisile ? View.VISIBLE : View.INVISIBLE);// 中间标题mViewHolder.tvCenterTitle.setVisibility(isCenterTitleVisile ? View.VISIBLE : View.INVISIBLE);// 右侧返回图标,文字if (!isRightIconVisile && !isRightTitleVisile){mViewHolder.llRight.setVisibility(View.INVISIBLE);}else{mViewHolder.llRight.setVisibility(View.VISIBLE);}mViewHolder.ivRightComplete.setVisibility(isRightIconVisile ? View.VISIBLE : View.GONE);mViewHolder.tvRightComplete.setVisibility(isRightTitleVisile ? View.VISIBLE : View.INVISIBLE);}/*** 设置标题* * @param title*/public void setAppTitle(String title){if (!TextUtils.isEmpty(title)){mViewHolder.tvCenterTitle.setText(title);}}public void setRightTitle(String text){if (!TextUtils.isEmpty(text)){mViewHolder.tvRightComplete.setText(text);}}public void setRightIcon(int sourceID){mViewHolder.ivRightComplete.setImageResource(sourceID);}public void setLeftOnclick(OnLeftButtonClickListener mOnLeftButtonClickListener){if (mOnLeftButtonClickListener != null){}}public void setAppBackground(int color){viewAppTitle.setBackgroundColor(color);}public void setOnLeftButtonClickListener(OnLeftButtonClickListener listen){mLeftButtonClickListener = listen;}public void setOnRightButtonClickListener(OnRightButtonClickListener listen){mRightButtonClickListener = listen;}public static abstract interface OnLeftButtonClickListener{public abstract void onLeftButtonClick(View v);}public static abstract interface OnRightButtonClickListener{public abstract void OnRightButtonClick(View v);}static class MyViewHolder{LinearLayout llLeftGoBack;TextView tvCenterTitle;LinearLayout llRight;ImageView ivRightComplete;TextView tvRightComplete;public MyViewHolder(View v){llLeftGoBack = (LinearLayout) v.findViewById(R.id.llLeftGoBack);tvCenterTitle = (TextView) v.findViewById(R.id.tvCenterTitle);llRight = (LinearLayout) v.findViewById(R.id.llRight);ivRightComplete = (ImageView) v.findViewById(R.id.ivRightComplete);tvRightComplete = (TextView) v.findViewById(R.id.tvRightComplete);}}
}

在使用中如何使用呢,接下来看在项目中  布局文件的引用

    <包名.MyAppTitleandroid:id="@+id/myNewAppTitle"android:layout_width="match_parent"android:layout_height="wrap_content" ></包名.MyAppTitle>

下面是在activity中如何初始化该标题的代码

private void setMyAppTitle(){MyAppTitle mNewAppTitle = (MyAppTitle) this.findViewById(R.id.myNewAppTitle);mNewAppTitle.initViewsVisible(true, true, false, true);mNewAppTitle.setAppTitle(getString(R.string.toptitle_tool_MySuggestActivity));mNewAppTitle.setRightTitle("提交");mNewAppTitle.setOnLeftButtonClickListener(new OnLeftButtonClickListener(){@Overridepublic void onLeftButtonClick(View v){onBackPressed();}});mNewAppTitle.setOnRightButtonClickListener(new OnRightButtonClickListener(){@Overridepublic void OnRightButtonClick(View v){//TODO}});}

这就是全部的代码了 在这里贴出来  方便以后的学习

Android自定义控件之app标题栏的封装相关推荐

  1. react native Android端保持APP后台运行--封装 Headless JS

    react native Android端保持APP后台运行--封装 Headless JS 前些日子在做后台下载时踩了后台运行这个大坑,RN官网文档上面在安卓上提供了Headless JS方法,iO ...

  2. Android 实战 - 个人App乐逗项目(查看网页链接封装,播放视频封装)

    1.查看网页链接封装 和 Android实战-个人App乐逗项目(第一阶段:微信精选文章完成与总结) 中的webview一样,采用腾讯x5浏览服务sdk调用的. 效果 预览 : 所需 工具 : 腾讯x ...

  3. 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

    上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下 ...

  4. Android自定义控件之实现快速检索

    前言:关于这个快速检索我们平常见到的app应用的很多,比如手机通讯录联系人.微信朋友,以及其他的商品列表等,实现的功能就是通过右侧或者左侧的字母进行快速检测,OK!今天我就带领大家来实现这个功能! - ...

  5. 基于Android的天气APP

    基于Android的天气APP 前言 项目:https://github.com/w77996/Weather 多知天气,代码写的不咋的,主要是给大家学习一下.有些东西也是借鉴别人的主要借鉴的是别人的 ...

  6. Android 自定义控件 轻松实现360软件详情页

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转载请标 ...

  7. android 自定义天气特效,《Android自定义控件》WindMillView,仿华为天气风车效果

    转载请标明出处:https://blog..net/m0_38074457/article/details/87890997,本文出自[陈少华的博客] 一.效果图 二.实现步骤 三.代码实现 1.at ...

  8. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  9. 自定义控件android特效,Android自定义控件eBook实现翻书效果实例详解

    本文实例讲述了Android自定义控件eBook实现翻书效果的方法.分享给大家供大家参考,具体如下: 效果图: Book.java文件: package com.book; import androi ...

  10. Android之6.0 权限申请封装

    之前一篇博客初试了Android6.0系统的动态权限申请,成功之后开始思考将权限申请功能封装以供更加方便的调用. 查阅6.0系统权限相关的API,整个权限申请需要调用三个方法: 1. ContextC ...

最新文章

  1. [2016-04-19 15:46:03 - IceHoloReader1.0] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER [20
  2. SVA Function Coverage
  3. tensorflow使用tf.placeholder会报错
  4. 用户密码和cookie,session、token还有AKSK
  5. dll已加载但找不到入口点dllregisterserver_Java 是如何加载类的?
  6. 简单说说async/await
  7. tomcat-servlet-AJAX最基础例子
  8. 若依前端table中如何显示图片?
  9. Codeforces Round #198 (Div. 2)A,B题解
  10. es分片及source字段小结
  11. Webrtc之源码结构
  12. 采样次数不同平均值不一样_认知的不同,才有不一样的人生
  13. 渗透第一个靶机 shop1.0 (还是简单渗透版)
  14. Google seo图片优化技巧
  15. android 支付宝 授权登录,android 支付宝授权登录、获取个人信息一键接入
  16. 配置路由器console接口密码和vty接口密码
  17. 2018.7.18 上半年课程总结 4- 高级英语
  18. 360 mysql读写分离_mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
  19. 游泳馆会员管理系统功能图
  20. 从经济学角度解释:为什么画家总是死后成名?

热门文章

  1. nodejs/pomelo 使用 mongodb 连接 mongo时 出现
  2. Ajax 加载数据 练习 自我有些迷糊了,写的大概请谅解 ^ _ ^
  3. python魔法方法-比较相关
  4. eclipse常见问题配置
  5. 栈实现10进制到8进制的转换
  6. Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作
  7. 局域网电脑访问IIS
  8. Dubbo--002--例子程序
  9. mac和jar的关系
  10. JBoss - 调整JVM内存 -Xms512m -Xmx1024m