android--------自定义控件 之 组合控件篇
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--------自定义控件 之 组合控件篇相关推荐
- Android开发技巧——自定义控件之组合控件
Android开发技巧--自定义控件之组合控件 我准备在接下来一段时间,写一系列有关Android自定义控件的博客,包括如何进行各种自定义,并分享一下我所知道的其中的技巧,注意点等. 还是那句老话,尽 ...
- android中的标题栏是什么意思,Android通用标题栏组合控件
原标题:Android通用标题栏组合控件 快,点击蓝色"字体"关注这个公众号,一起涨姿势 由于项目中经常用到此种组合控件,就封装了下,具体效果看下图,老司机可以绕道哈! 一.主要功 ...
- android 中的组合控件的设计
在开发应用程序的时候,很多时候会使用到几个重复的控件,例如Android手机的设置界面里面的位置服务里面的每一栏都是组合控件,也就是说多个控件组成一个整体,如下图所示: 红色方框里面的是由两个Text ...
- android自定义波浪图,Android自定义控件--波浪图控件
今天给大家分享一个android的波浪图控件制作.具体效果如下图所示: 上次有个app使用了这个控件,感觉特别酷炫.今天讲解一下这个控件的思路分析与代码编写. 思路分析: 1.绘制波浪图 2.移动波浪 ...
- Android Studio自定义组合控件
在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件. 本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太 ...
- android自定义刻度线,Android自定义控件之刻度尺控件
今天我做的是一个自定义刻度尺控件,由于项目需求需要使用刻度尺那样滑动选择,由于对自定义控件的认识还不够深入,于是花了一周多时间才把这个控件给整出来,也是呕心沥血的经历啊,也让我对自定义控件有了自己的认 ...
- 【Android】App开发-控件篇
App开发是一个工作量比较大的项目,要学习App开发首先我们要先去学习手机中的各类工具和信息是怎么运行的,我们可以使用哪些工具来对手机进行设置.这里我采用的开发工具是Android studio. 目 ...
- android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...
转载:http://blog.csdn.net/xiabing082/article/details/48781489 1. 大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...
- Android View体系(十)自定义组合控件
相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...
最新文章
- 电阻参数_压敏电阻原理、参数、选型
- Hibernate执行原理总结
- CoreCLR源码探索(八) JIT的工作原理(详解篇)
- 车牌识别数据集_行人再识别数据集
- openstack资源使用汇总_OpenStack 如何查看主机已使用的资源啊?
- php服务模块在nginx中的安装失败,在已安装的nginx中添加模块
- PHP读取大文件的几种方法
- 259 [LeetCode] 3Sum Smaller 三数之和较小值
- linux 远程桌面 命令,linux 命令 远程连接
- ORACLE SQL功能优化系列(一)
- git 远程仓库 remote 使用总结
- c语言编写aoi程序,AOI编程步骤
- oracle取得组内行号,行号
- 秦九韶算法(java实现)
- montypython买火柴_无聊图集(2017-04-01)
- 【Java基础系列教程】第三章 Java变量与运算符
- tab效果——支持tab标题的宽度自适应
- 美赞臣中国独立后任命朱定平为总裁;思拓凡亚洲首个技术研发卓越中心上海揭幕 | 美通社头条...
- 文件服务器的配置实训报告,《服务器配置与调试实训报告》要点
- c7200-adventerprisek9.124-9.T.bin
热门文章
- 为什么我推荐ImageJ?
- 【LeetCode】【字符串】题号:412. Fizz Buzz
- cannot import name 'StrictRedis' from 'redis'
- 李宏毅2017机器学习homework1-利用gradient descent拟合宝可梦CP值代码并利用adagrad进行优化
- 逐像元地表反射率计算(GF4)
- 29_2020年12月29日疫情一览
- Docker与容器化-02-与镜像和容器操作相关的命令
- Call for Presentations!Flink Forward Global 2021 议题征集ing
- 我的面试标准:能干活、基础要好、有潜力!
- 直播首屏耗时400ms以下的优化实践