安卓自定义控件、自定义xml里的属性的用法

2024-09-06 08:08

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

   在android相关应用开发过程中,固定的一些属性可能满足不了开发的需求,所以在一些特殊情况下,需要自定义控件与属性,本文将以此问题进行详细介绍,需要的朋友可以参考下。


步骤一: 继承 View 定制 自己需要的 控件


public class State3BidTitleView extends RelativeLayout implements OnClickListener {


实现 时 需要 重写 带两个 参数 的 构造函数 ,即如下, 否则运行时会 报错崩溃

    public State3BidTitleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOnClickListener(this);


步骤二:xml 布局文件中按如下方式 使用, 其中 xmlns:app= 中的 app可根据自己的需要随意取名,"http://schemas.android.com/apk/res/com.snippet.xsdjr" 中的 后面的com.snippet.xsdjr 是app的 包名 , 前面的不变

     <com.snippet.xsdjr.ui.view.State3BidTitleView  xmlns:app="http://schemas.android.com/apk/res/com.snippet.xsdjr"
             android:id="@+id/amount3StateTV1"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             app:bidTitleText="测试"
             android:layout_weight="1"/>


步骤三:上面两步完成后基本可以使用了,但是使用过程会有些不方便,因为只能使用系统继承过来的 属性,比如 android:layout_width=  、   android:id=  等等之类,

     像上面例子中 的 app:bidTitleText="测试" 是怎么来的呢? 用法如下:

   在 res/ values / attrs.xml  写 如下 定义:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="BidTitleAttrs">
        <attr name="bidTitleText" format="string" />
    </declare-styleable>

</resources>

其中 BidTitleAttrs 可根据 自己的 view的意义 自己 取名, 这个名字是 在 (Context context, AttributeSet attrs)  构造函数中使用的,bidTitleText 即是在 xml 布局文件中使用,但是命名空间 需要 自己 定制 ,不能使用 android: 作为 命名空间 ,使用方式 如右:       app:bidTitleText="测试"  


步骤四: 在 两参数 的 构造函数 中 需要 来 解析  attrs.xml  中 定义 的 定制样式,解析方式如下:

注意 : R.styleable.BidTitleAttrs 中的 BidTitleAttrs 是 的 attrs.xml 中定义的 ,  获取 其中一条属性时 使用 a.getString(R.styleable.BidTitleAttrs_bidTitleText); 其中 BidTitleAttrs_bidTitleText 的 名字 是由 BidTitleAttrs + "_" + bidTitleText 拼接起来的;

另外一个需要注意的 就是 不同值类型的 属性 需要 使用不同的 获取 方法 getString   ,  getDimon  ,  getBool  之类的 看名字慢慢找


    public State3BidTitleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOnClickListener(this);
        
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BidTitleAttrs);
        titleText = a.getString(R.styleable.BidTitleAttrs_bidTitleText);
        a.recycle();

        
        this.tabTextView = new TextView(context);
        this.tabTextView.setText(this.titleText);
        this.tabTextView.setTextSize(14.0F);
        this.tabTextView.setTextColor(getResources().getColor(R.color.bid_red_dark));
        RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        lp1.addRule(RelativeLayout.CENTER_IN_PARENT);
        this.tabTextView.setLayoutParams(lp1);
        this.tabTextView.setId(R.id.finance_title);
        addView(this.tabTextView);

}


步骤五:attr.xml 是 属性值 的 类型枚举值 如下:

1.reference:参考某一资源ID。

       (1)属性定义:

            <declare-styleable name = "名称">

                     <attr name = "background" format = "reference" />

           </declare-styleable>

       (2)属性使用:

            <ImageView

                  android:layout_width = "42dip"

                  android:layout_height = "42dip"

                  android:background = "@drawable/图片ID"

            />

2. color:颜色值


<declare-styleable name = "名称">

<attr name = "textColor" format = "color" />

</declare-styleable>

3. boolean:布尔值


<declare-styleable name = "名称">

<attr name = "focusable" format = "boolean" />

</declare-styleable>

4. dimension:尺寸值。


<declare-styleable name = "名称">

<attr name = "layout_width" format = "dimension" />

</declare-styleable>

5. float:浮点值。

6. integer:整型值。

7. string:字符串

8. fraction:百分数。

9. enum:枚举值

10. flag:位或运算


注意:

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

(1)属性定义:

<declare-styleable name = "名称">

<attr name = "background" format = "reference|color" />

</declare-styleable>

(2)属性使用:

<ImageView

android:layout_width = "42dip"

android:layout_height = "42dip"

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

/>







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



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

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

intellij idea generatorConfig.xml

generatorConfig.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-ge

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器