Android 自定义控件的属性使用

<declare-styleablename=“名称”>

<attrname="focusable"format=“boolean”/>

(2)属性使用:

复制代码代码如下:

<Button

android:layout_width=“42dip”

android:layout_height=“42dip”

android:focusable=“true”

/>

4.dimension:尺寸值。

(1)属性定义:

复制代码代码如下:

<declare-styleablename=“名称”>

<attrname="layout_width"format=“dimension”/>

(2)属性使用:

复制代码代码如下:

<Button

android:layout_width=“42dip”

android:layout_height=“42dip”

/>

5.float:浮点值。

(1)属性定义:

复制代码代码如下:

<declare-styleablename=“AlphaAnimation”>

<attrname="fromAlpha"format=“float”/>

<attrname="toAlpha"format=“float”/>

(2)属性使用:

复制代码代码如下:

<alpha

android:fromAlpha=“1.0”

android:toAlpha=“0.7”

/>

6.integer:整型值。

(1)属性定义:

复制代码代码如下:

<declare-styleablename=“AnimatedRotateDrawable”>

<attrname=“visible”/>

<attrname="frameDuration"format=“integer”/>

<attrname="framesCount"format=“integer”/>

<attrname=“pivotX”/>

<attrname=“pivotY”/>

<attrname=“drawable”/>

(2)属性使用:

复制代码代码如下:

<animated-rotate

xmlns:android=“http://schemas.android.com/apk/res/android”

android:drawable=“@drawable/图片ID”

android:pivotX=“50%”

android:pivotY=“50%”

android:framesCount=“12”

android:frameDuration=“100”

/>

7.string:字符串。

(1)属性定义:

复制代码代码如下:

<declare-styleablename=“MapView”>

<attrname="apiKey"format=“string”/>

(2)属性使用:

复制代码代码如下:

<com.google.android.maps.MapView

android:layout_width=“fill_parent”

android:layout_height=“fill_parent”

android:apiKey=“0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g”

/>

8.fraction:百分数。

(1)属性定义:

复制代码代码如下:

<declare-styleablename=“RotateDrawable”>

<attrname=“visible”/>

<attrname="fromDegrees"format=“float”/>

<attrname="toDegrees"format=“float”/>

<attrname="pivotX"format=“fraction”/>

<attrname="pivotY"format=“fraction”/>

<attrname=“drawable”/>

(2)属性使用:

复制代码代码如下:

<rotate

xmlns:android=“http://schemas.android.com/apk/res/android”

android:interpolator=“@anim/动画ID”

android:fromDegrees=“0”

android:toDegrees=“360”

android:pivotX=“200%”

android:pivotY=“300%”

android:duration=“5000”

android:repeatMode=“restart”

android:repeatCount=“infinite”

/>

9.enum:枚举值。

(1)属性定义:

复制代码代码如下:

<declare-styleablename=“名称”>

<attrname=“orientation”>

<enumname="horizontal"value=“0”/>

<enumname="vertical"value=“1”/>

(2)属性使用:

复制代码代码如下:

<LinearLayout

xmlns:android=“http://schemas.android.com/apk/res/android”

android:orientation=“vertical”

android:layout_width=“fill_parent”

android:layout_height=“fill_parent”>

10.flag:位或运算。

(1)属性定义:

复制代码代码如下:

<declare-styleablename=“名称”>

<attrname=“windowSoftInputMode”>

<flagname="stateUnspecified"value=“0”/>

<flagname="stateUnchanged"value=“1”/>

<flagname="stateHidden"value=“2”/>

<flagname="stateAlwaysHidden"value=“3”/>

<flagname="stateVisible"value=“4”/>

<flagname="stateAlwaysVisible"value=“5”/>

<flagname="adjustUnspecified"value=“0x00”/>

<flagname="adjustResize"value=“0x10”/>

<flagname="adjustPan"value=“0x20”/>

<flagname="adjustNothing"value=“0x30”/>

(2)属性使用:

复制代码代码如下:

<activity

android:name=“.StyleAndThemeActivity”

android:label=“@string/app_name”

android:windowSoftInputMode=“stateUnspecified|stateUnchanged | stateHidden”>

actionandroid:name=“android.intent.action.MAIN”/

categoryandroid:name=“android.intent.category.LAUNCHER”/

特别要注意:

属性定义时可以指定多种类型值。

(1)属性定义:

复制代码代码如下:

<declare-styleablename=“名称”>

<attrname="background"format=“reference|color”/>

(2)属性使用:

复制代码代码如下:

<ImageView

android:layout_width=“42dip”

android:layout_height=“42dip”

android:background=“@drawable/图片ID|#00FF00”

/>

下面说说AttributeSet与TypedArray在自定义控件中的作用:

AttributeSet的作用就是在控件进行初始化的时候,解析布局文件中该控件的属性(keyeg:background)与该值(valueeg:@drawable/icon)的信息封装在AttributeSet中,传递给该控件(View)的构造函数。对于非Android自带的属性,在View类中处理时是无法识别的,因此需要我们自己解析。所以这就要用到另外一个类TypedArray。在AttributeSet中我们有属性名称,有属性值,但是控件如何知道哪个属性代表什么意思呢?这个工作就由TypedArray来做了。TypedArray对象封装了/values/attrs.xml中的styleable里定义的每个属性的类型信息,通过TypedArray我们就可以知道AttributeSet中封装的值到底是干什么的了,从而可以对这些数据进行应用。

AttributeSet就相当于一盒糖,TypedArray就相当于这盒糖上的标签说明,告诉用户每个糖的口味等。这盒糖有什么口味是由用户自己的styleable文件里面的内容来决定的。

来源: <http://www.jb51.net/article/48962.htm>

二、自定义属性的应用

让我们再来看看布局xml中需要注意的事项。

**首先得声明一下:xmlns:mytool(名字可以任意)=http://schemas.android.com/apk/res/cn.zzm.toolbar (自定义包名)

注意,“mytool”可以换成其他的任何名字,后面的url地址必须最后一部分必须用上自定义组件的包名。自定义属性了,在属性名前加上“mytool”即可。**

**<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:CommonText=“http://schemas.android.com/apk/res-auto” //对与自定义属性的引用可以直接使用这个

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:background=“@drawable/bg”

android:orientation=“vertical” >**

使用自定义的时候,有两种方式 AttributeSet 来获取属性或者 TypedArray

private static final String ATTRS = “http://schemas.android.com/apk/res-auto”;

private TextView tv_setting_update;

public SetItemView(Context context) {

super(context);

}

public SetItemView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

//设置图标

int set_icon = attrs.getAttributeResourceValue(ATTRS, “set_icon”, 0);

//设置内容

String set_content = attrs.getAttributeValue(ATTRS, “set_content”);

//设置更新内容

String set_update = attrs.getAttributeValue(ATTRS, “set_update”);

//设置箭头

int arrow = attrs.getAttributeResourceValue(ATTRS, “set_arrow”, 0);

if (set_icon != 0) {

setIv_icon(set_icon);

}

if (arrow != 0) {

setIv_arrow(arrow);

}

if (!TextUtils.isEmpty(set_update)) {

tv_setting_update.setVisibility(View.VISIBLE);

setTv_setting_update(set_update,false);

}

if (!TextUtils.isEmpty(set_content)) {

setTv_content(set_content);

}

}

public void setIv_icon(int iv_icon) {

this.iv_setting_icon.setBackgroundResource(iv_icon);

}

public void setTv_content(String tv_content) {

this.tv_setting_content.setText(tv_content);

}

使用:

<FrameLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:itemView=“http://schemas.android.com/apk/res-auto”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:background=“@drawable/bg_setting”

android:orientation=“vertical”>

<com.xxx.widget.SetItemView

android:id=“@+id/setItem_mapManger”

android:layout_width=“fill_parent”

android:layout_height=“wrap_content”

itemView:set_arrow=“@drawable/img_arrow”

itemView:set_content=“商城地图管理”

itemView:set_icon=“@drawable/icon_setting_0” />

另一种通过TypedArray来实现的

/**

  • 属性 参数的配置 自己 到attrs 文件去配置

  • 如果 不需要 就不要 get set 自己选择性的 重写

*/

public class MyTextView extends LinearLayout{

private String mTextInfo;

private int mTextColor;

private float mTextSize;

private TextView tv_info;

private TextView tv_num;

private String mTextNum;

public MyTextView(Context context) {

super(context);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:

image

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分

image

image

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

最后

光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:

[外链图片转存中…(img-2nJuOr8X-1713197397051)]

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分

[外链图片转存中…(img-azqwTsVi-1713197397051)]

[外链图片转存中…(img-QKIgnRik-1713197397051)]

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 23
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值