文档章节

自定义组合控件

最咸的咸鱼
 最咸的咸鱼
发布于 2017/07/06 23:39
字数 776
阅读 8
收藏 0
点赞 0
评论 0

1. 自定义组合控件

经常使用的界面,并且界面是由多个子控件或子布局组成,这时候需要组合控件

组合控件的作用:用于封装常用的控件组合效果,方便开发者使用

步骤:

①定义控件继承ViewGroup或ViewGroup的子类,由实际需求而定,我们这里定义相对布局

public class SettingItemView extends RelativeLayout {

...

}

②初始化界面

public SettingItemView(Context context, AttributeSet set) {
   super(context, set);

   // 将布局和view绑定

   //表示将参数2对应的界面inflate成为view作为子视图加入到this中
   View view = View.inflate(context, R.layout.view_setting_item, this);

...

}

通过分析发现每个条目的样式大致相同,但略有不同.

1,标题不一致

2,背景不一致

将自定义组合控件作为一个整体看,想要改变自定义控件内部的Textview的文本,

做为调用者只能给自定义组合控件传递属性值,需求是改变自定义控件内部的TextView的文本,而当前自定义组合控件因继承相对布局,并没有”android:text”这样的属性

故:我们需要自己定义一个属性来接收调用者传入的文本值,再有自定义组合控件将值设置到内部的TextView

自定义属性步骤:

①在values目录下定义attrs.xml文件

<resources>
    <declare-styleable name="SettingItemView">
        <!-- 显示不同的title内容,这里的属性名可随意定义,但最好不要定义和现有属性一致的名称 -->
        <attr name="item_title" format="string" />
    </declare-styleable>
</resources>

②在activity_main.xml文件中定义名称空间和声明属性

<LinearLayout
    android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"

...
    >

    <com.itheima.groupviewdemo.SettingItemView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:item_title="我的设置1"></com.itheima.groupviewdemo.SettingItemView>

③在自定义组合控件内部获取自定义属性的值,并设置到内部的TextView上

public SettingItemView(Context context, AttributeSet set) {
   super(context, set);

   // 将布局和view绑定
   View view = View.inflate(context, R.layout.view_setting_item, this);


   mTvTitle = (TextView) findViewById(R.id.view_tv_title);
   // 读取自定的属性
   TypedArray ta = context.obtainStyledAttributes(set,
         R.styleable.SettingItemView);
   //获取自定义属性的值
   String title = ta.getString(R.styleable.SettingItemView_item_title);
   //获取完成后一定要做回收处理
   ta.recycle();
   mTvTitle.setText(title);

   ...

}

若想要控制自定义控件的背景,也可以定义一个枚举类型的属性值,获取属性值并设置到控件上

enum:枚举,表示item_background只允许输入三个(first,middle,last),分别对应int值0,1,2

<declare-styleable name="SettingItemView">

<!-- 背景的设置 -->

<attr name="item_background">
             <enum name="first" value="0" />
             <enum name="middle" value="1" />
             <enum name="last" value="2" />
         </attr>

...

}

 

activity_main.xml文件中

<com.itheima.groupviewdemo.SettingItemView
    ...
    app:item_background="first"

...

></com.itheima.groupviewdemo.SettingItemView>

在自定义组合控件中

public SettingItemView(Context context, AttributeSet set) {
   super(context, set);
   ...
   int bkg = ta.getInt(R.styleable.SettingItemView_item_background, 0);
   ...
   // 设置背景
   switch (bkg) {
   case BKG_FIRST:
      view.setBackgroundResource(R.drawable.seting_first_selector);
      break;
   case BKG_MIDDLE:
      view.setBackgroundResource(R.drawable.seting_middle_selector);
      break;
   case BKG_LAST:
      view.setBackgroundResource(R.drawable.seting_last_selector);
      break;
   default:
      view.setBackgroundResource(R.drawable.seting_first_selector);
      break;
   }

控制开关的打开和关闭

//在自定义组合控件中定义方法
public void setToggleOn(boolean on) {
   this.isToggleOn = on;
   if (on) {
      mIvToggle.setImageResource(R.drawable.on);
   } else {
      mIvToggle.setImageResource(R.drawable.off);
   }
}

// 如果打开就关闭,如果关闭就打开
public void toggle() {
   setToggleOn(!isToggleOn);
}

 

//当在activity中被点击后调用方法

@Override
protected void onCreate(Bundle savedInstanceState) {

...

siv1.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                   siv1.toggle();
              }
         });

...

 

}

© 著作权归作者所有

共有 人打赏支持
最咸的咸鱼
粉丝 1
博文 3
码字总数 2366
作品 0
武汉
程序员
Android 自定义组合控件小结

引言 接触Android UI开发的这段时间以来,对自定义组合控件有了一定的了解,为此小结一下,本文小结内容主要讨论的是如何使用Android SDK提供的布局和控件组成一个功能完整组合控件并将其封装...

程序袁_绪龙 ⋅ 2014/09/24 ⋅ 0

Android自定义控件前言

Android自定义控件 一系列讲解Android自定义控件的文章,包含内容:组合控件、自定义View、自定义ViewGroup、实战,给Android新手朋友们一个引导。这些文章将同时同步到github上老萌主 组合控...

老萌主 ⋅ 2016/03/10 ⋅ 0

Android 自定义控件

用到的图片文件: 平时都是用简单的控件通过布局来组合一大堆控件,界面复杂起来的话,布局文件就很大,维护起来也很烦。就想把常用的控件组合写成自定义控件,这样维护起来也方便,代码也清...

超级大富 ⋅ 2013/12/18 ⋅ 2

Android自定义控件(二)组合控件

组合控件的意思就是,我们并不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但我们可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。 定义是足够...

Jack_1900 ⋅ 2014/07/12 ⋅ 0

Xtreme Toolkit Pro专业版介绍

Xtreme Toolkit pro专业版集合了下面所列出的每一个产品。点击每个产品的链接可以看到相关产品的特性简介。当你了解完相关产品特性,你可以返回到本产品网页去浏览Xtreme Toolkit pro专业版余...

javascriptc ⋅ 2014/08/26 ⋅ 0

BCGSoft Demo示例展示之一般示例集合(1/2)

BCGSoft公司的BCGControlBar产品是全球最优秀的MFC界面类库,功能强大,显示丰富,在国际上享有盛誉,并屡次获奖,是VC界面设计的必备首选! 本文中的这些示例程序主要演示了如何创建先进的图...

Miss_Hello_World ⋅ 2016/04/25 ⋅ 0

Android自定义View的实现(四)

如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。 一、自绘控件 自绘...

JayPark不作死 ⋅ 2014/07/02 ⋅ 0

Android 自定义UI控件模板 组合模式

Android 自定义UI控件模板 组合模式: 一.自定义属性: 在res/values中创建attr.xml文件,并添加以下代码(如有则直接添加): 二.自定义控件: 三.布局中使用 Android: 自定义View http://www...

SRain215 ⋅ 2016/03/15 ⋅ 0

axure复用-自定义组件,母版(模板)

组件(控件)是用于设计线框图的用户界面元素。在组件(控件)面板中包含有常用的控件库,如按钮、图片、文本框等。从组件面板中拖动一个控件到线框图区域中,就可以添加一个组件。组件可以从...

随智阔 ⋅ 2014/04/19 ⋅ 0

Android自定义控件View的探讨

本文转载自:http://www.apkbus.com/forum.php?mod=viewthread&tid=242501&extra=page%3D1 做过了一段时间的安卓开发都会接触到自定义控件,那么对于自定义控件大家都有什么样的看法呢?自定...

谁带我去看看世界 ⋅ 2015/06/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

在java中读取文件(也支持读取jar中的文件)

getClass().getResourceAsStream("文件名.格式"); 这个方法是用于获取当前类所在目录下的文件;需要将文件放到和当前类同一个包下面 比如我有个类在 com.test这个包下, 要读取一个test.jpg的图...

太黑_thj ⋅ 54分钟前 ⋅ 0

CentOS 7 源码编译安装 MySQL 5.7记录

没事瞎折腾,本来可以yum安装,却偏偏去要编译源码。 1. 安装依赖包 1). 安装cmake等依赖 # yum install cmake ncurses ncurses-devel bison bison-devel 2). 安装boost 1.59.0 # wget htt...

admin_qing ⋅ 56分钟前 ⋅ 0

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部