2019独角兽企业重金招聘Python工程师标准>>>

上篇介绍了自定义控件的自定义属性篇,地址:https://my.oschina.net/zhangqie/blog/1805970

这篇博文主要来说说 自定义控件的组合控件来提高布局的复用

使用自定义组合控件的好处?

我们在项目开发中经常会遇见很多相似或者相同的布局,比如APP的标题栏,我们就可以用自定义组合控件来实现,以提高开发效率,降低开发成本为导向的,也便于扩展。

当然也可以有其他方式,如 include 标签

1:标题栏布局文件

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"><ImageViewandroid:id="@+id/title_tab_left"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_marginLeft="5dp"android:background="@null"android:minHeight="45dp"android:textSize="14sp"/><TextViewandroid:id="@+id/title_tab_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:maxLines="1"android:textSize="17sp" /><Buttonandroid:id="@+id/title_tab_right"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="7dp"android:background="@null"android:minHeight="45dp"android:minWidth="45dp"android:textSize="14sp" />
</merge>

2:属性文件

 <declare-styleable name="TopTabToolView"><attr name="tab_background_color" format="color"/><attr name="left_tab_visible" format="boolean"/><attr name="left_tab_drawable" format="reference|integer"/><attr name="title_text" format="string"/><attr name="title_color" format="color"/><attr name="right_tab_visible" format="boolean"/><attr name="right_tab_text" format="string"/><attr name="right_tab_text_color" format="color"/><attr name="right_tab_drawable" format="reference|integer"/>
</declare-styleable>

3:自定义控件

public class TopTabToolView extends RelativeLayout {private ImageView titleBarLeftImg;private Button titleBarRightBtn;private TextView titleBarTitle;public TopTabToolView(Context context) {super(context);}public TopTabToolView(Context context, AttributeSet attrs) {super(context, attrs);LayoutInflater.from(context).inflate(R.layout.tab_tool_layout,this,true);titleBarLeftImg = (ImageView)findViewById(R.id.title_tab_left);titleBarTitle = (TextView)findViewById(R.id.title_tab_title);titleBarRightBtn = (Button)findViewById(R.id.title_tab_right);TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.TopTabToolView);if (typedArray != null){//背景设置int titleBarBackGround = typedArray.getColor(R.styleable.TopTabToolView_tab_background_color, Color.WHITE);setBackgroundColor(titleBarBackGround);//-------------------------标题栏左边----------------------boolean leftImgVisible = typedArray.getBoolean(R.styleable.TopTabToolView_left_tab_visible,true);if (leftImgVisible){titleBarLeftImg.setVisibility(VISIBLE);}else {titleBarLeftImg.setVisibility(GONE);}//设置图标int leftTabDrawble = typedArray.getResourceId(R.styleable.TopTabToolView_left_tab_drawable,-1);if (leftTabDrawble != -1){titleBarLeftImg.setImageResource(leftTabDrawble);}//--------------------------中间标题-----------------------String titleText = typedArray.getString(R.styleable.TopTabToolView_title_text);if (!TextUtils.isEmpty(titleText)){titleBarTitle.setText(titleText);//设置字体颜色int titleTextColor = typedArray.getColor(R.styleable.TopTabToolView_title_color,Color.WHITE);titleBarTitle.setTextColor(titleTextColor);}//------------------------标题栏右边-------------------------boolean rightButtonVisible = typedArray.getBoolean(R.styleable.TopTabToolView_right_tab_visible,true);if (rightButtonVisible){titleBarRightBtn.setVisibility(VISIBLE);}else {titleBarRightBtn.setVisibility(INVISIBLE);}//设置文字String rightBtnText = typedArray.getString(R.styleable.TopTabToolView_right_tab_text);if (!TextUtils.isEmpty(rightBtnText)){titleBarRightBtn.setText(rightBtnText);int rightBtnTextColor = typedArray.getColor(R.styleable.TopTabToolView_right_tab_text_color,Color.WHITE);titleBarRightBtn.setTextColor(rightBtnTextColor);}//设置图标int rightBtnDrawable = typedArray.getResourceId(R.styleable.TopTabToolView_right_tab_drawable,-1);if (rightBtnDrawable != -1){titleBarRightBtn.setCompoundDrawablesWithIntrinsicBounds(0,0,rightBtnDrawable,0);}typedArray.recycle();}}public TopTabToolView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}/*** 设置标题* @param title*/public void setTitle(String title){if (!TextUtils.isEmpty(title)){titleBarTitle.setText(title);}}/**** 左边点击* @param onClickListener*/public void setLeftOnClickListener(OnClickListener onClickListener){if (onClickListener != null){titleBarLeftImg.setOnClickListener(onClickListener);}}/**** 右边点击* @param onClickListener*/public void setRightOnClickListener(OnClickListener onClickListener){if (onClickListener != null){titleBarRightBtn.setOnClickListener(onClickListener);}}
}

属性文件的设置也可以通过Java代码修改, 如: Title标题

4:Activity代码

public class Demo3Activity extends AppCompatActivity {TopTabToolView topTabToolView;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.demo3);initView();}private void initView(){topTabToolView = (TopTabToolView) findViewById(R.id.tab1);topTabToolView.setTitle("代码设置标题");topTabToolView.setLeftOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});topTabToolView.setRightOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(Demo3Activity.this,"关闭",Toast.LENGTH_LONG).show();}});}
}

效果图:

源码地址:https://github.com/DickyQie/android-custom-control

转载于:https://my.oschina.net/zhangqie/blog/1806507

android--------自定义控件 之 组合控件篇相关推荐

  1. Android开发技巧——自定义控件之组合控件

    Android开发技巧--自定义控件之组合控件 我准备在接下来一段时间,写一系列有关Android自定义控件的博客,包括如何进行各种自定义,并分享一下我所知道的其中的技巧,注意点等. 还是那句老话,尽 ...

  2. android中的标题栏是什么意思,Android通用标题栏组合控件

    原标题:Android通用标题栏组合控件 快,点击蓝色"字体"关注这个公众号,一起涨姿势 由于项目中经常用到此种组合控件,就封装了下,具体效果看下图,老司机可以绕道哈! 一.主要功 ...

  3. android 中的组合控件的设计

    在开发应用程序的时候,很多时候会使用到几个重复的控件,例如Android手机的设置界面里面的位置服务里面的每一栏都是组合控件,也就是说多个控件组成一个整体,如下图所示: 红色方框里面的是由两个Text ...

  4. android自定义波浪图,Android自定义控件--波浪图控件

    今天给大家分享一个android的波浪图控件制作.具体效果如下图所示: 上次有个app使用了这个控件,感觉特别酷炫.今天讲解一下这个控件的思路分析与代码编写. 思路分析: 1.绘制波浪图 2.移动波浪 ...

  5. Android Studio自定义组合控件

    在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件.  本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太 ...

  6. android自定义刻度线,Android自定义控件之刻度尺控件

    今天我做的是一个自定义刻度尺控件,由于项目需求需要使用刻度尺那样滑动选择,由于对自定义控件的认识还不够深入,于是花了一周多时间才把这个控件给整出来,也是呕心沥血的经历啊,也让我对自定义控件有了自己的认 ...

  7. 【Android】App开发-控件篇

    App开发是一个工作量比较大的项目,要学习App开发首先我们要先去学习手机中的各类工具和信息是怎么运行的,我们可以使用哪些工具来对手机进行设置.这里我采用的开发工具是Android studio. 目 ...

  8. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...

    转载:http://blog.csdn.net/xiabing082/article/details/48781489 1.  大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...

  9. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...

  10. Android View体系(十)自定义组合控件

    相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...

最新文章

  1. 电阻参数_压敏电阻原理、参数、选型
  2. Hibernate执行原理总结
  3. CoreCLR源码探索(八) JIT的工作原理(详解篇)
  4. 车牌识别数据集_行人再识别数据集
  5. openstack资源使用汇总_OpenStack 如何查看主机已使用的资源啊?
  6. php服务模块在nginx中的安装失败,在已安装的nginx中添加模块
  7. PHP读取大文件的几种方法
  8. 259 [LeetCode] 3Sum Smaller 三数之和较小值
  9. linux 远程桌面 命令,linux 命令 远程连接
  10. ORACLE SQL功能优化系列(一)
  11. git 远程仓库 remote 使用总结
  12. c语言编写aoi程序,AOI编程步骤
  13. oracle取得组内行号,行号
  14. 秦九韶算法(java实现)
  15. montypython买火柴_无聊图集(2017-04-01)
  16. 【Java基础系列教程】第三章 Java变量与运算符
  17. tab效果——支持tab标题的宽度自适应
  18. 美赞臣中国独立后任命朱定平为总裁;思拓凡亚洲首个技术研发卓越中心上海揭幕 | 美通社头条...
  19. 文件服务器的配置实训报告,《服务器配置与调试实训报告》要点
  20. c7200-adventerprisek9.124-9.T.bin

热门文章

  1. 为什么我推荐ImageJ?
  2. 【LeetCode】【字符串】题号:412. Fizz Buzz
  3. cannot import name 'StrictRedis' from 'redis'
  4. 李宏毅2017机器学习homework1-利用gradient descent拟合宝可梦CP值代码并利用adagrad进行优化
  5. 逐像元地表反射率计算(GF4)
  6. 29_2020年12月29日疫情一览
  7. Docker与容器化-02-与镜像和容器操作相关的命令
  8. Call for Presentations!Flink Forward Global 2021 议题征集ing
  9. 我的面试标准:能干活、基础要好、有潜力!
  10. 直播首屏耗时400ms以下的优化实践