继承RelativeLayout 自定义布局
public class HomeToolbarView extends RelativeLayout {
TextView tvTitle;
public HomeToolbarView(Context context) {
super(context);
addView(context);
}
public HomeToolbarView(Context context, AttributeSet attrs) {
super(context, attrs);
addView(context);
}
public HomeToolbarView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
addView(context);
}
public void addView(Context mContext){
ImageView imageViewMenu=new ImageView(mContext);
ImageView imageViewMessage=new ImageView(mContext);
tvTitle=new TextView(mContext);
addView(imageViewMenu);
addView(imageViewMessage);
addView(tvTitle);
RelativeLayout.LayoutParams menuLayoutParams = (RelativeLayout.LayoutParams) imageViewMenu.getLayoutParams();
RelativeLayout.LayoutParams messageLayoutParams = (RelativeLayout.LayoutParams) imageViewMessage.getLayoutParams();
RelativeLayout.LayoutParams titleLayoutParams = (RelativeLayout.LayoutParams) tvTitle.getLayoutParams();
menuLayoutParams.width=getResources().getDimensionPixelOffset(R.dimen.home_toolbar_image_width_heigth);
menuLayoutParams.height=getResources().getDimensionPixelOffset(R.dimen.home_toolbar_image_width_heigth);
menuLayoutParams.setMargins(getResources().getDimensionPixelOffset(R.dimen.common_margin)
,0,0,0);
menuLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE);
menuLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL,TRUE);
titleLayoutParams.width= LayoutParams.MATCH_PARENT;
titleLayoutParams.height=LayoutParams.MATCH_PARENT;
titleLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);
messageLayoutParams.width=getResources().getDimensionPixelOffset(R.dimen.home_toolbar_image_width_heigth);
messageLayoutParams.height=getResources().getDimensionPixelOffset(R.dimen.home_toolbar_image_width_heigth);
messageLayoutParams.setMargins(0
,0,getResources().getDimensionPixelOffset(R.dimen.common_margin),0);
messageLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);
messageLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL,TRUE);
imageViewMenu.setBackground(ContextCompat.getDrawable(mContext,R.drawable.ico_toolbar_left_menu));
imageViewMessage.setBackground(ContextCompat.getDrawable(mContext,R.drawable.ico_toolbar_left_message));
tvTitle.setText(mContext.getString(R.string.app_name));
tvTitle.setTextSize(getResources().getDimension(R.dimen.textsize_8));
tvTitle.setTextColor(ContextCompat.getColor(mContext,R.color.common_blue));
tvTitle.setGravity(Gravity.CENTER);
imageViewMenu.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
listener.leftClick();
}
});
imageViewMessage.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
listener.rightClick();
}
});
imageViewMenu.setLayoutParams(menuLayoutParams);
imageViewMessage.setLayoutParams(messageLayoutParams);
tvTitle.setLayoutParams(titleLayoutParams);
}
public void setTitle(String title){
tvTitle.setText(title);
}
//自定义的顶部ActionBar的点击监听;
private HomeToolbarClickListener listener;
//点击事件的监听接口
public interface HomeToolbarClickListener {
void leftClick();
void rightClick();
}
//提供activity调用的方法,类似于Button类的setOnClickListener(OnClickListener listener)
//传入具体实现方法
public void setOnTopbarClickListener(HomeToolbarClickListener listener){
this.listener=listener;
}
}
使用
<com.freexiaoyu.app.widget.HomeToolbarView
android:id="@id/toolbar_home"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="48.0dp"
android:orientation="vertical"/>
activity
@BindView(R.id.toolbar_home)
HomeToolbarView toolbar_home;
toolbar_home.setTitle(getString(R.string.app_name));
toolbar_home.setOnTopbarClickListener(new HomeToolbarView.HomeToolbarClickListener() {
@Override
public void leftClick() {
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
} else {
mDrawerLayout.openDrawer(Gravity.LEFT);
}
}
@Override
public void rightClick() {
}
});
展示效果

继承RelativeLayout 自定义布局的更多相关文章
- Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)
前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...
- 深入解析_Android的自定义布局
前言: 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了) Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种And ...
- Android零基础入门第28节:轻松掌握RelativeLayout相对布局
原文:Android零基础入门第28节:轻松掌握RelativeLayout相对布局 在前面三期中我们对LinearLayout进行了详细的解析,LinearLayout也是我们用的比较多的一个布局. ...
- Collection View 自定义布局(custom flow layout)
Collection view自定义布局 一般我们自定义布局都会新建一个类,继承自UICollectionViewFlowLayout,然后重写几个方法: prepareLayout():当准备开始布 ...
- 详细分享UICollectionView的自定义布局(瀑布流, 线性, 圆形…)
前言: 本篇文章不是分享collectionView的详细使用教程, 而是属于比较’高级’的collectionView使用技巧, 阅读之前, 我想你已经很熟悉collectionView的基本使用, ...
- OC - 31.通过封装的自定义布局快速实现商品展示
概述 实现效果 设计思路 采用MVC架构,即模型—视图-控制器架构 使用MJExtension框架实现字典转模型 使用MJRefresh框架实现上拉和下拉刷新 上拉刷新,加载新的数据 下拉刷新,加载更 ...
- OC - 29.自定义布局实现瀑布流
概述 瀑布流是电商应用展示商品通常采用的一种方式,如图示例 瀑布流的实现方式,通常有以下几种 通过UITableView实现(不常用) 通过UIScrollView实现(工作量较大) 通过UIColl ...
- AcitonBar 自定义布局
Android系统中ActionBar默认的布局不美观且难于控制,通过为ActionBar自定义布局的方式可以灵活控制ActionBar. 自定义Activity主题和ActionBar样式 在新建的 ...
- Swift - 使用网格(UICollectionView)的自定义布局实现复杂页面
网格UICollectionView除了使用流布局,还可以使用自定义布局.实现自定义布局需要继承UICollectionViewLayout,同时还要重载下面的三个方法: 1 2 3 4 5 6 7 ...
随机推荐
- Laravel Scout 开启队列, 自定义queue name和queue connection
scout.php的默认配置: 'queue' => env('SCOUT_QUEUE', false), 修改为: 'queue' => [ 'queue' => env('SCO ...
- 【python全栈开发】初识python
本人最开始接触python是在2013年接触,写过hello word!在此之前对开发类没有多大兴趣,不知道重要性,属于浑浑噩噩,忙忙乎乎,跌跌撞撞的.随后选择了Linux运维作为就业主攻方向. 经过 ...
- swagger2常用注解
常用注解: @Api()用于类: 表示标识这个类是swagger的资源 @ApiOperation()用于方法: 表示一个http请求的操作 @ApiParam()用于方法,参数,字段说明: 表示对参 ...
- Visual C++ 6.0中if..else..的简单用法和基本格式
# include <stdio.h> int main (void) { float score; printf("请输入您的考试成绩:"); scanf(" ...
- 1ubuntu安装虚拟机
安装相关打软件:(qemu-kvm qemu-system是kvm和qemu的核心包,libvirt-bin用于管理kvm,virt-manager图形管理工具,bridge-utils vlan,主 ...
- windows下配置maven
首先下载好maven的压缩包,然后解压到某个目录下,我解压到了D盘 打开readme.txt 1.2步已经完成,第3步的意思是让我们把bin所在的路径添加到系统变量的path中去 第4步意思是确保的你 ...
- sku
以淘宝为例,sku是具体到某一个商家具体规格商品,比如某商家红色64g的iPhone6,sku对应有对应的价格和库存.而SPU就是我们在输入框里输入的iPhone6,它是多个商家的集合.淘宝的“宝贝” ...
- python leetcode 颠倒二进制数
我的做法,,这个题在于必须补0 def reverseBits(n): num=32-len(bin(n)[2:]) m = bin(n)[2:][::-1] if num > 0: for i ...
- Flagr 配置说明
说明文档来自官方文档 https://checkr.github.io/flagr/#/flagr_env 完整配置 包含了组件的配置参数以及说明,对于学习如何使用Flagr 还是很重要的,包含了数据 ...
- C#集合类型大揭秘 【转载】
[地址]https://www.cnblogs.com/songwenjie/p/9185790.html 集合是.NET FCL(Framework Class Library)的重要组成部分,我们 ...