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

本文详细介绍了如何创建Android自定义组合控件,包括如何定义自定义属性、布局文件和类文件的实现。通过一个图片加文字的Item控件示例,展示了如何在attr文件中定义属性,然后在XML布局文件中使用。此外,还提供了组合控件的使用方法和注意事项,强调了自定义控件的高内聚和低耦合特性。
摘要由CSDN通过智能技术生成

组合控件详解 & 自定义属性

组合控件是自定义控件的一种,只不过它是由其他几个原生控件组合而成,故名组合控件。

在实际项目中,GUI 会遇到一些可以提取出来做成自定义控件情况。

一个自定义控件的好处就是把一些需要模块化的 UI 和逻辑放在一起,做到了高内聚,向其他模块提供接口并很少依赖外界,这样就是低耦合。一个自定义控件就是一个封闭的王国,这里由你掌控。

上述是我自己的一个体会,想必大家也会常做自定义控件吧,就像逻辑部分的模块化一样。

下面我要做一个例子,请看完成图。

4bbc967214c9

ocn.yang

下面一排图片加文字就是组合控件了,我是怎么做的呢?

其实这里用到了两个组合控件,一个是图片+文字,我把它叫一个 Item,而三个在一起就是另一个控件了。

重点看这个 Item,它有自己的属性如图片、文字、图片大小、文字大小、不透明度等等。这些把它定义在 attr 文件中,然后在 xml 文件中配置,就像我们用原生控件一样。

自定义属性

先看 attr 文件。

这个文件在 values 下,和 string 文件同级。把你自己要定义的属性都写在这里吧。format 是属性的“单位”,如果你要问有多少中 format 呀?答案在这里。

组合控件的布局文件

有了属性了,下面看看布局文件 level_menu_item.xml。

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/image_item"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:scaleType="fitCenter"

/>

android:id="@+id/tv_item"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:textColor="#23ffffff"

android:textSize="25sp"

/>

这里唯一值得一说的是文本的颜色。大家看见他是8位的,前两位是表示不透明度的,后六位是表示颜色的,三色,范围都是00~ff。

如果在 Java 中设置颜色,需要这样。

setTextColor(0x23ffffff);

关于不透明度,一般美工会定义。有些要求不透明如30%这样的,可以用整型换算一下。00~ff 对应十进制为0~255,那么30%就是255x0.3=76.5,用科学计算机换算为4c。

更多颜色相关设置这里附上《Android 中设置文本颜色的三种办法》

1、 利于系统自带的颜色类

如: TextView1.setTextColor(android.graphics.Color.RED);

布局文件中:android:textColor="@android:color/white"

详见Android源码:base/core/res/res/values/colors.xml

2、 数字颜色表示法

TextView1.setTextColor(0xffff00ff);

3、 自定义颜色

TextView1.setTextColor(this.getResources().getColor(R.drawable.red));

组合控件的类文件

然后我们就要写一个类,我这继承子线性布局。有两个构造函数,我们主要在两个参数的函数中工作。

public class LevelMenuItem extends LinearLayout {

public LevelMenuItem(Context context, AttributeSet attrs) {

super(context, attrs);

}

这个类中我们要完成的工作是,初始化控件属性、提供外部修改属性的接口、控件点击的回调接口。

此类完整代码:

package com.linc.game;

import android.content.Context;

import android.content.res.TypedArray;

import android.util.AttributeSet;

import android.view.LayoutInflater;

import andr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值