文档章节

自定义组合控件

最咸的咸鱼
 最咸的咸鱼
发布于 2017/07/06 23:39
字数 776
阅读 9
收藏 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
0
Android自定义控件前言

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

老萌主
2016/03/10
70
0
Android自定义控件(二)组合控件

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

Jack_1900
2014/07/12
0
0
Xtreme Toolkit Pro专业版介绍

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

javascriptc
2014/08/26
0
0
BCGSoft Demo示例展示之一般示例集合(1/2)

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

Miss_Hello_World
2016/04/25
32
0

没有更多内容

加载失败,请刷新页面

加载更多

OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
4
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
4
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
今天
5
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部