Iwfu-安卓自定义控件xml属性---TypedArray

2023-10-15 12:38

本文主要是介绍Iwfu-安卓自定义控件xml属性---TypedArray,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是一篇关于安卓自定义控件xml属性的博客

初次入门,笔尖寒酸。

以一个自定义带文字的图片控件为例:
自定义MyImageView继承LinearLayout

public class MyImageView extends LinearLayout {public MyImageView(Context context) {super(context);}public MyImageView(Context context, AttributeSet attrs) {super(context, attrs);}}

因为想实现带图片的文字(带文字的图片),初步想法是类似自定义ViewGroup然后添加入一个TextView和一个ImageView,只达到熟悉自定义组件提供xml属性即可。

在res文件夹新建资源文件attrs.xml,编写提供xml文件使用的属性:

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="MyImageView"><attr name="chanImageViewTitle" format="string|reference"></attr><attr name="chanImageViewSrc" format="reference"></attr><attr name="chanImageViewOrientation"><enum name="Vertical" value="0"></enum><enum name="Horizontal" value="1"></enum></attr></declare-styleable></resources>

其中,attr标签内name表示提供的属性名,format表示填写这个属性要输入的值的格式,可以用”|”隔开,允许多种输入值格式,自定义chanImageViewOrientation只有两个值,水平或垂直,用emu标签枚举出所有的类型即可。

然后修改MyImageView代码:

使用TypedArray读取xml属性值

/*** Created by Administrator on 2016/4/14.** 自定义带图片的TextView*/
public class MyImageView extends LinearLayout {public MyImageView(Context context) {super(context);}public MyImageView(Context context, AttributeSet attrs) {super(context, attrs);ImageView imageView = new ImageView(context);TextView textView = new TextView(context);//资源id,读取自定义属性的每一种属性时用这个值接收下int resourceId;//这里要填两个参数的方法,attrs如果不传入则控件无效//获取属性数组
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.MyImageView);//遍历属性数组,根据属性不同,进行不同操作int n = typedArray.getIndexCount();for (int i = 0; i < n; i++) {int attr = typedArray.getIndex(i);switch (attr) {// 处理文字case R.styleable.MyImageView_chanImageViewTitle :resourceId = typedArray.getResourceId(attr, 0);Log.d ("title","---"+resourceId+"---");if (resourceId > 0) {// 如果是引用类型的textView.setText(typedArray.getResources().getText(resourceId).toString());} else {// 如果是字符串类型的textView.setText(typedArray.getString(attr));}break;// 处理图片case R.styleable.MyImageView_chanImageViewSrc :resourceId = typedArray.getResourceId(attr, 0);Log.d ("src","---"+resourceId+"---");if (resourceId > 0) {// 是引用类型imageView.setImageResource(resourceId);} else {imageView.setImageResource(R.mipmap.ic_launcher);}break;// 处理方向case R.styleable.MyImageView_chanImageViewOrientation :resourceId = typedArray.getInt (attr,1);Log.d ("orentation","---"+resourceId+"---");if (resourceId == 1) {// 如果是水平this.setOrientation(LinearLayout.HORIZONTAL);} else {// 如果是纵向this.setOrientation(LinearLayout.VERTICAL);}break;}}addView(textView);addView(imageView);typedArray.recycle();}
}

使用完typedArray后记得要调用recycle( );

其中缘由有博客讲的很详细:

http://blog.csdn.net/Monicabg/article/details/45014327

然后在activity_main调用,记得加上命名空间;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"xmlns:my="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.demo.mycustomview.MainActivity"><com.demo.mycustomview.MyImageView
        android:layout_width="wrap_content"android:layout_height="wrap_content"my:chanImageViewTitle="chanImageViewTitle"my:chanImageViewOrientation="Vertical"my:chanImageViewSrc="@mipmap/ic_launcher"></com.demo.mycustomview.MyImageView></LinearLayout>

完结~

这篇关于Iwfu-安卓自定义控件xml属性---TypedArray的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/217753

相关文章

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用