自定义组件及根据需求定义符合要求的控件

自定义控件流程:

一、继承相应View,如:TextView  ImageView; 组合控件一般继承ViewGroup,如:LinearLayout etc.

二、构造方法:

       public ArrowIndicatorView(Context context){this(context, null);}    //该构造方法在代码中new该控件时调用
      public ArrowIndicatorView(Context context, @Nullable AttributeSet attrs) {         this(context, attrs, 0);
        }
        public ArrowIndicatorView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {           super(context, attrs, defStyleAttr);
     }
     后两个构造方法是在xml文件中使用该控件时调用。
       1、构造方法相关参数:
           context:一般获取的是Activity;
           AttributeSet:与XML文档中的标签相关联的属性集合,指android系统提供的属性??
           int defStyleAttr:定义的风格属性??该属性一般用不到
   三、自定义该控件的属性:如尺寸大小等,用于在xml文件中控制该控件(耦合度??)
   (这一步不是必须的,若无自定义属性,就不用这一步)
       1、在res/values/路径下,新建attrs.xml文件(若无此文件)
       2、在declare-styleable标签下定义控件属性:       
          <declare-styleable name="ArrowIndicatorView">
                    <attr name="triangleHeight" format="dimension"/>
         </declare-styleable>  
         第一个name为自定义的控件名称
         <attr 后的name为属性名,format为属性类型
       3、在控件类中取得自定义属性:
         TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ArrowIndicatorView);
            Drawable bg_tab = array.getDrawable(R.styleable.ArrowIndicatorView_tabsBackground);
            array.recycle();

使用TypeArray获取自定义属性,obtainStyledAttributes的第二个属性为attrs.xml文件中定义的name?

获取属性用 array.getAttrbuteName()方法

TypeArray使用完毕后,必须调用recycle()方法回收TypeArray,为给下一调用者使用??

四、 组合控件,添加组件有两种方式:

1、首先new相应控件,并设置必要属性,最后使用addView()向ViewGroup内部添加组件

eg:

           View view = new View(getContext());
            LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, (int) triangleHeight);
            view.setLayoutParams(params);
            addView(view);

2、获取自定义属性时使用方法:obtainStyledAttributes(@StyleRes int resid, int[]attrs)

第一个参数为:layout.xml文件的Id,第二个属性为attrs.xml文件中定义的name?

五、横竖屏时的保存和恢复数据(若需要)

1、保存数据重载(??)onSaveInstanceState()方法

2、恢复数据重载onRestoreInstanceState(Parcelable state)方法

六、自定义View时,用到的方法可能有:

1、onMeasure 测量尺寸

2、onLayout 在View中的位置?

3、onDraw 最常用到

七、若有其他需要,可复写相应方法,涉及到的点有:

1、事件分发机制:拦截相应事件

2、外部接口:为内部组件设置事件监听时,若有需要,则自定义接口,暴露给控件使用者

android自定义控件(组合控件)相关相关推荐

  1. Android 自定义组合控件小结

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

  2. Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件

    目标:实现EditText和Button组合成带有清空EditText内容功能的复合控件,可以通过代码设置自定义控件的相关属性. 实现效果为: (1)在res/layout目录下编写自定义组合控件的布 ...

  3. Android自定义组合控件---教你如何自定义下拉刷新和左滑删除

    绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一 ...

  4. android 原理 组合控件_Android自定义控件进阶01-自定义控件开发套路与流程

    Android自定义控件进阶01-自定义控件开发套路与流程本章节为什么要叫进阶篇?(虽然讲的是基础内容),因为从本篇开始,将会逐渐揭开自定义View的神秘面纱,每一篇都将比上一篇内容更加深入,利用所学 ...

  5. android 原理 组合控件_Android_组合方式自定义控件

    用组合的方式自定义一个导航栏,功能: 左边个back被点击时,用监听的方式告诉系统自己被点击了了:右边个back被点击时,进入下一个界面. a.png 在MainActivity中用代码实现: 定义一 ...

  6. Android自定义组合控件

    目标:实现textview和ImageButton组合,可以通过Xml设置自定义控件的属性. 1.控件布局:以Linearlayout为根布局,一个TextView,一个ImageButton. Xm ...

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

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

  8. android自定义组件属性,Android组合控件详解 自定义属性

    组合控件详解 & 自定义属性 组合控件是自定义控件的一种,只不过它是由其他几个原生控件组合而成,故名组合控件. 在实际项目中,GUI 会遇到一些可以提取出来做成自定义控件情况. 一个自定义控件 ...

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

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

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

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

最新文章

  1. 单独学python能干嘛-学 Python 都用来干嘛的?
  2. split、replace、indexof、substr 用法 (获取后台富文本框内容,截取图片)
  3. 休眠性能提示:脏收集效果
  4. [css] 如何让一个块元素绝对居中?
  5. Flink SQL 1.11 on Zeppelin 平台化实践
  6. 想加入IT行业为何建议你学Python,不要错过时机哦
  7. 解决这个警告⚠️:warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory...
  8. 解决iSlider的一些问题(滑动组件)
  9. python可以和java共存吗_python3 and python2 共存
  10. window docker TensorFlow环境搭建
  11. android 默认shell busybox,采用busybox 代替android 自带的shell
  12. 两种添加数据到DropDownList 控件的方法
  13. 如何用记事本编写Java代码?
  14. Python调用QQ截图工具
  15. 微信小程序-样式-引入
  16. 已知一个字典包含若干员工信息,姓请编写一个函数,删除性别为男的员工信息
  17. 2022-06-18 jQuery遍历方法:$.each()方法遍历对象或数组的示例
  18. 如何在字符串中加双引号
  19. 1. 【Part3】 Contour Detection and Hierarchical Image Segmentation【轮廓检测图像分割】
  20. 不同调制方式对信道容量影响的分析

热门文章

  1. Qt调用工业相机之巴斯勒相机
  2. 杭州电子科技大学计算机技术考研总结
  3. 广西大学计算机与电子信息学院李智,赵进创,广西大学 计算机与电子信息学院...
  4. 深入了解Excel工作表中的控件
  5. java 车牌模糊_免费模糊车牌照片处理软件
  6. 保监会借大数据摸底保险中介市场
  7. 【Linux】用户管理命令
  8. 2021抖音数据报告(完整版)
  9. java初级程序员学习思路
  10. Excel如何表格中一键生成柱表图