效果图

image

实现方案

方案概述

通过在xml布局文件中组合控件,通过自定义view类加载xml文件,让外部通过xml属性或者方法来设置数据.

主要实现代码

组合view xml文件

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="16dp"

android:gravity="center_vertical"

android:orientation="horizontal">

android:id="@+id/currentLocationLogoIv"

android:layout_width="11.4dp"

android:layout_height="14dp"

android:layout_marginRight="4dp"

android:src="@mipmap/location" />

android:id="@+id/locationNameTv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginRight="9dp"

android:textColor="#ff333333"

android:textSize="16sp"

tools:text="科技园" />

android:id="@+id/locationAddressTv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="16dp"

android:textColor="#999999"

android:textSize="12sp"

tools:text="江苏省南京市" />

自定义view类

class LocationViewWithAttrs(

context: Context,

attrs: AttributeSet?

) : LinearLayout(context, attrs) {

var name: String? = null

var address: String? = null

init {

initTypeValue(context, attrs)

initView(context)

}

private fun initTypeValue(

context: Context,

attrs: AttributeSet?

) {

val typedArray = context.obtainStyledAttributes(attrs, R.styleable.LocationViewWithAttrs)

name = typedArray.getString(R.styleable.LocationViewWithAttrs_locationName)

address = typedArray.getString(R.styleable.LocationViewWithAttrs_locationDesc)

typedArray.recycle()

}

private fun initView(context: Context) {

LayoutInflater.from(context).inflate(R.layout.view_location, this, true)

setData(name,address)

}

fun setData(name: String?, address: String?) {

name?.let { locationNameTv.text = it }

address?.let { locationAddressTv.text = it }

}

}

styles文件

调用方式

xml设置

android:id="@+id/locationView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

app:locationDesc="A市B区C路D号"

app:locationName="程序园中猿中心" />

通过开放方法设置

locationView.setData("程序园中猿中心", "A市B区C路D号")

备注

如果不需要支持xml设置,那就不需要上面的styles文件以及自定义view文件中对于style的处理方法initTypeValue.

源代码

android自定义组合view,安卓自定义view之组合view相关推荐

  1. 超全的Android面经_安卓面经(20/30)之自定义View全解析

    系列专栏: 安卓高频面经解析大全专栏链接:150道安卓高频面试题全解析 安卓高频面经解析大全目录详情 : 安卓面经_anroid面经_150道安卓常见基础面试题全解析 安卓系统Framework面经专 ...

  2. android控件向内弧度_安卓自定义 View 基础:坐标系、角度弧度、颜色

    安卓自定义View基础 - 坐标系 一.屏幕坐标系和数学坐标系的区别 由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向, 所以在手机屏幕上的坐标系与数学中常见的坐标系是 ...

  3. android canvas绘制圆角_Android自定义View撸一个渐变的温度指示器(TmepView)

    秦子帅明确目标,每天进步一点点..... 作者 |  andy 地址 |  blog.csdn.net/Andy_l1/article/details/82910061 1.概述 自定义View对需要 ...

  4. android绘制心形_Android自定义View系列(一)——打造一个爱心进度条

    写作原因:Android进阶过程中有一个绕不开的话题--自定义View.这一块是安卓程序员更好地实现功能自主化必须迈出的一步.下面这个系列博主将通过实现几个例子来认识安卓自定义View的方法.从自定义 ...

  5. 安卓自定义View进阶-分类与流程

    自定义View绘制流程函数调用链(简化版) 一.自定义View分类 我将自定义View分为了两类(sloop个人分类法,非官方): 1.自定义ViewGroup 自定义ViewGroup一般是利用现有 ...

  6. 安卓自定义view全解:初始化,onDraw函数,onMeasure函数,用户手势事件

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓自定义view全解. view类包含如下函数.可供重写. onFinishInflate() 回调方法,当应用从XML加载该组件并用它构建界面之后 ...

  7. Carson带你学Android:源码解析自定义View Draw过程

    前言 自定义View是Android开发者必须了解的基础 网上有大量关于自定义View原理的文章,但存在一些问题:内容不全.思路不清晰.无源码分析.简单问题复杂化 等 今天,我将全面总结自定义View ...

  8. 【朝花夕拾】Android自定义View篇之(一)View绘制流程

    前言 转载请申明转自[https://www.cnblogs.com/andy-songwei/p/10955062.html]谢谢! 自定义View.多线程.网络,被认为是Android开发者必须牢 ...

  9. 安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例

    安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例,图片压缩处理逻辑 本文旨在介绍自定义View的实现 ...

最新文章

  1. PostgreSQL第一步:安装
  2. 内存溢出分析之工具篇
  3. abap性能优化——利用凭证的number ranger提高abap程序性能
  4. python中用*打印一个上三角形和下三角形组成的三角形
  5. 将基于 .NET Framework 的 WPF 项目迁移到基于 .NET Core 3
  6. df命令---Linux学习笔记
  7. xp定时关机软件_好用又免费的电脑定时工具,不用得后悔
  8. swift - scrollview 判断左右移动, 以及上下两个view联动
  9. [转载] python的短逻辑
  10. 美国旧金山之行第三天
  11. 相同数据源情况下,使用Kafka实时消费数据 vs 离线环境下全部落表后处理数据,结果存在差异...
  12. 未来教育 · 软件破解
  13. Java中Base64的解析
  14. RH8搭建静态网站——基于https协议的静态网站(综合练习)
  15. QuerySet,本质上是一个给定的模型的对象列表
  16. 【转】《仙剑奇侠传6》将更换全新引擎
  17. CIFAR10数据集集 cifar-10-python.tar.gz
  18. 高可用服务设计之二:Rate limiting 限流与降级
  19. 平头哥智能语音CB5654开发板如何读取云端的返回值
  20. RabbitMQ学习笔记:高级特性TTL(过期时间)

热门文章

  1. java se环境变量_Windows 7中配置JDK(Java SE)环境变量
  2. Python IDLE换行写,一行写不下,如何换行继续写
  3. javascript之数组(二)
  4. java的一些小知识总结
  5. python调用simulink_[Python-MATLAB] 在Python中调用MATLAB的API
  6. android split工具,合并APKS为APK工具 Apktool M – AntiSplit on Android v2.4.0|张小北
  7. mysql 字符转数组_mysql下将分隔字符串转换为数组
  8. java final 变量 好处_深入理解Java中的final关键字
  9. java 有序集合_java有哪些有序集合?
  10. OpenShift 4 - Fedora CoreOS (1) - 最简安装