自定义View之组合控件(下)

作者: JohnyPeng | 来源:发表于2017-01-11 09:34 被阅读106次

前言

自定义View之组合控件(上)中讲解初步组合自己的想要的控件,这篇将会讲解如何设置属性和设置控件的位置。

设置属性

之前在attrs.xml文件中设置了一些属性并且通关过TypedArray获取到了,但是为了保证有足够的灵活性,也要能够让使用者在代码中也能设置属性,所以要提供一些方法。例如:

//设置一个动态的颜色,可以实现按下不同颜色的效果
public void setItemTextColor(ColorStateList colorStateList) {
    mTitleTextColor = colorStateList;
}
public void setImageSize(float size) {
    mImageSize = size;
}

以这种方式设置的话,一定要设置一种刷新方式,不然可用不到控件上面去。。
例如:

private TextView createTextView(BottomMenuItem item) {
    TextView titleTextView = new TextView(getContext());
    LayoutParams textViewLayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    titleTextView.setGravity(Gravity.CENTER);
    titleTextView.setLayoutParams(textViewLayoutParams);
    titleTextView.setText(item.getTitle());
    titleTextView.setEnabled(item.isEnabled());
    titleTextView.setTextColor(mTitleTextColor);
    titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTitleTextSize);
    return titleTextView;
}

定义控件的位置

大家在自定义View的时候可能使用onMeasure()或者是onLayout()来定义View的子元素的位置,但是组合控件不一样,它本身是一个布局,所以直接用布局来定义就可以。例如:

private ImageView createImageView(BottomMenuItem item) {
    ImageView iconImageView = new ImageView(getContext());
    //通过LayoutParams来控制控件的位置
    LayoutParams imageLayoutParams = new LayoutParams(dpToPx(mImageSize), dpToPx(mImageSize));
    imageLayoutParams.setMargins(0, dpToPx(DEFAULT_IMAGE_MARGIN_TOP), 0, dpToPx(DEFAULT_IMAGE_MARGIN_BOTTOM));
    iconImageView.setLayoutParams(imageLayoutParams);
    iconImageView.setEnabled(item.isEnabled());
    iconImageView.setImageDrawable(item.getIcon());
    return iconImageView;
}

通过LayoutParams来控制自身的大小和位置。。不过LayoutParams有很多种,最好和你的控件要放到的布局一样就OK了。如果没有那么可以用ViewGroup的。

组合控件的注意点

  1. 通过LayoutParams是不能控制自定义ViewGroup的大小,可以通过重写onMeasure()方法来控制

总结

组合控件真的是非常简单,但是很实用,举个例子,如果有个布局我想要向里面动态添加控件,怎么办?或者是想要一个宽高成比例的布局怎么办?这个时候实用自定义组合的控件就比较好用。。

相关文章

  • android自定义View基础

    自定义View基础1.1 分类自定义View的实现方式有以下几种 类型 定义自定义组合控件 多个控件组合成为一个...

  • 自定义View之组合控件(下)

    前言 在自定义View之组合控件(上)中讲解初步组合自己的想要的控件,这篇将会讲解如何设置属性和设置控件的位置。 ...

  • 自定义View记录

    自定义View只要有三种类型:自绘控件、组合控件、继承控件。 自绘控件 自定义View主要是因为系统的内置View...

  • android2019-01-03

    1.View的绘制流程自定义控件:1、组合控件。这种自定义控件不需要我们自己绘制,而是使用原生控件组合成的新控件。...

  • 每天五道Android面试题,轻松进大厂2018-12-20

    一、View的绘制流程 自定义控件: 1、组合控件。这种自定义控件不需要我们自己绘制,而是使用原生控件组合成的新控...

  • Android中的自定义控件

    Android中的自定义控件大致可以分成三类:自定义组合控件、继承原生控件的自定义控件、继承View自己实现绘制的...

  • 自定义View

    自定义View 1、什么是自定义View? 自定义View可分为三类: a、把系统内置的控件组合起来生成...

  • Android自定义控件之自定义组合控件

    Android自定义控件之自定义组合控件 前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原...

  • 自定义控件的原因以及动画的分类

    什么是自定义控件? 在 Android 系统中使用系统自带控件重新组合或者自定义类继承 View / ViewGr...

  • 自定义控件笔记1

    自定义控件:用系统自带控件重新组合或者自定义类继承View或者自定义类继承ViewGroup,实现特定的UI效果。...

网友评论

    本文标题:自定义View之组合控件(下)

    本文链接:https://www.haomeiwen.com/subject/kbnlbttx.html