谈谈- declare-styleable属性

在Android开发中,往往要用到自定义的控件来实现我们的需求或效果。在使用自定义 
控件时,难免要用到自定义属性,那怎么使用自定义属性呢?

一、简单使用:

 

1.在文件res/values/下新建attrs.xml属性文件,中定义我们所需要的属性:
<resources><!-- resource是跟标签,可以在里面定义若干个declare-styleable -->
<declare-styleable name="custom_view"><!-- name定义了变量的名称 --><attr name="custom_color" format="color"></attr> <!-- 定义对应的属性,name定义了属性的名称 --><attr name="custom_size" format="dimension"></attr> <!--每一个发生要定义format指定其类型,类型包括 reference   表示引用,参考某一资源IDstring   表示字符串color   表示颜色值dimension   表示尺寸值boolean   表示布尔值integer   表示整型值float   表示浮点值fraction   表示百分数enum   表示枚举值flag   表示位运算-->
</declare-styleable>
 

2.在布局中使用:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:ldm="http://schemas.android.com/apk/res/com.ldm.learn"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#f6f6f6"android:orientation="vertical"android:padding="10dp" ><com.ldm.learn.CustomTextViewandroid:layout_width="100dp"android:layout_height="100dp"android:text="自定义TextView"ldm:custom_color="#333333"ldm:custom_size="35sp" /></LinearLayout>

2.在代码中引用:
public class CustomTextView extends TextView {
 private int textSize;//自定义文件大小

     private int textColor;//自定义文字颜色

    //自定义属性,会调用带两个参数的构造方法
    public CustomTextView(Context context, AttributeSet attrs) {
           super(context, attrs);
           TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.custom_view);//TypedArray属性对象
            textSize = ta.getDimensionPixelSize(R.styleable.custom_view_custom_size, 20);//获取属性对象中对应的属性值
           textColor = ta.getColor(R.styleable.custom_view_custom_color, 0x0000ff);
           setColorAndSize(textColor, textSize);//设置属性
           ta.recycle();
}

   public CustomTextView(Context context){

           super(context);

}

   private void setColorAndSize(int textColor, int textSize){

           setTextColor(textColor);

          setTextSize(textSize);

}

 

}

 

 

 

二、declare-styleable属性详解:

 

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:颜色值。

    (1)属性定义:

            <declare-styleable name = "名称">

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

            </declare-styleable>

    (2)属性使用:

            <TextView

                     android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:textColor = "#00FF00"

                     />

3. boolean:布尔值。

    (1)属性定义:

            <declare-styleable name = "名称">

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

            </declare-styleable>

    (2)属性使用:

            <Button

                    android:layout_width = "42dip"
                    android:layout_height = "42dip"

                    android:focusable = "true"

                    />

4. dimension:尺寸值。

    (1)属性定义:

            <declare-styleable name = "名称">

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

            </declare-styleable>

    (2)属性使用:

            <Button

                    android:layout_width = "42dip"
                    android:layout_height = "42dip"

                    />

5. float:浮点值。

    (1)属性定义:

            <declare-styleable name = "AlphaAnimation">

                   <attr name = "fromAlpha" format = "float" />
                   <attr name = "toAlpha" format = "float" />

            </declare-styleable>

    (2)属性使用:

            <alpha
                   android:fromAlpha = "1.0"
                   android:toAlpha = "0.7"

                   />

6. integer:整型值。

    (1)属性定义:

            <declare-styleable name = "AnimatedRotateDrawable">

                   <attr name = "visible" />
                   <attr name = "frameDuration" format="integer" />
                   <attr name = "framesCount" format="integer" />
                   <attr name = "pivotX" />
                   <attr name = "pivotY" />
                   <attr name = "drawable" />

            </declare-styleable>

    (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-styleable name = "MapView">
                   <attr name = "apiKey" format = "string" />
            </declare-styleable>

    (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-styleable name="RotateDrawable">
                   <attr name = "visible" />
                   <attr name = "fromDegrees" format = "float" />
                   <attr name = "toDegrees" format = "float" />
                   <attr name = "pivotX" format = "fraction" />
                   <attr name = "pivotY" format = "fraction" />
                   <attr name = "drawable" />
            </declare-styleable>

    (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-styleable name="名称">
                   <attr name="orientation">
                          <enum name="horizontal" value="0" />
                          <enum name="vertical" value="1" />
                   </attr>           

            </declare-styleable>

    (2)属性使用:

            <LinearLayout

                    xmlns:android = "http://schemas.android.com/apk/res/android"
                    android:orientation = "vertical"
                    android:layout_width = "fill_parent"
                    android:layout_height = "fill_parent"
                    >
            </LinearLayout>

10. flag:位或运算。

     (1)属性定义:

             <declare-styleable name="名称">
                    <attr name="windowSoftInputMode">
                            <flag name = "stateUnspecified" value = "0" />
                            <flag name = "stateUnchanged" value = "1" />
                            <flag name = "stateHidden" value = "2" />
                            <flag name = "stateAlwaysHidden" value = "3" />
                            <flag name = "stateVisible" value = "4" />
                            <flag name = "stateAlwaysVisible" value = "5" />
                            <flag name = "adjustUnspecified" value = "0x00" />
                            <flag name = "adjustResize" value = "0x10" />
                            <flag name = "adjustPan" value = "0x20" />
                            <flag name = "adjustNothing" value = "0x30" />
                     </attr>        

             </declare-styleable>

     (2)属性使用:

            <activity

                   android:name = ".StyleAndThemeActivity"
                   android:label = "@string/app_name"
                   android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
                   <intent-filter>
                          <action android:name = "android.intent.action.MAIN" />
                          <category android:name = "android.intent.category.LAUNCHER" />
                   </intent-filter>
             </activity>

特别要注意:

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

    (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"

                     />

转载:http://blog.csdn.net/langxinlen/article/details/50343175

转载于:https://www.cnblogs.com/zly1022/p/7526198.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker:自定义ubuntu/制作镜像引用/ubuntu换源更新

一、需求 1. 制作一个图像辨识的api&#xff0c;用到相同设置的ubuntu镜像&#xff0c;但是每次制作都要更新ubuntu和下载tesseract浪费半个到一个小时下载&#xff0c;所以制作一个自定义ubuntu几次镜像大大提高开发效率。 2. 制作ubuntu过程时&#xff0c;可以调试tesserac…

jQuery 属性和CSS

HTML代码&#xff1a; <div id"div1">div1<p>1</p><p>2</p><p>3</p> </div> <div id"div2">div2</div> <div id"div3">div3</div>attr()设置节点的属性 $("#div1…

facebook人脸照片_为什么您的Facebook照片看起来如此糟糕(以及您可以如何做)...

facebook人脸照片Facebook is a popular platform for sharing photos, even though it’s not a very good one. They prioritize fast loading images over high quality ones. You can’t stop it from happening, but you can minimize the quality loss. Facebook是一个受…

用C#自己动手写个操作系统,爽!

自从C#的AOT编译机制发布以来&#xff0c;有趣的项目越来越多&#xff0c;今天给大家推荐一个开源项目&#xff0c;用C#开发的64位操作系统。项目简介这是一个使用.NET Native AOT技术编译的C# 64位操作系统&#xff0c;系统的基础功能基本都已经支持&#xff1a;网卡、多处理、…

JavaFX 学习笔记——窗口与控件

前言 如今比较流行的桌面gui框架有WPF、WinForm、Qt、javafx等。其中WPF和WinForm目前还只能在运行Winsows上。Qt(widget)是一个很强大的跨平台C框架(不只是UI)&#xff0c;但用C写界面实在有点蛋疼&#xff0c;且编译出来的体积很大。 JavaFX是基于JAVA的开源桌面框架&#xf…

Linux 用户名、主机添加背景色

文章参考&#xff1a;PS1应用之——修改linux终端命令行各字体颜色 Linux 用户名、主机添加背景色&#xff0c;用于生产环境&#xff0c;这样可以减少人为的误操作。 1 [rootzhang ~]# tail /etc/bashrc 2 ……………… 3 export PS1"\[\e[37;40m\][\[\e[37;41m\]\u\[\e[3…

python 调用文件上传图片简单例子

使用方法&#xff1a; python.exe .\test.py "fileD:\img\mark_1080.png" "matchWordListRUN" "urlhttp://192.168.0.37:8081/templateMatch" test.py import requests import sysif __name__ "__main__":print(参数个数为:, len(s…

解决网站在负载均衡环境下SESSION丢失的问题

在WEB场中,动态网页往往会因为几台主机做了负载而产生SESSION丢失的问题&#xff0c;网上也有很多的介绍&#xff0c;我这里只将我经历的过程给大家分享一下&#xff1a; 系统要运行在负载平衡的 Web 场环境中&#xff0c;而系统配置文件web.config中的Session状态却设置为InPr…

如何从手机或PC将游戏下载到PlayStation 4

PlayStation 4 games can be huge, and take hours to download. Thankfully, you can start downloading games even when you’re away from home. All you need is Sony’s official smartphone app, or a web browser on any PC. PlayStation 4游戏可能非常庞大&#xff0c…

CML更新 | 新增百度小程序、支付宝小程序

祝所有工程师小伙伴开工大吉&#xff0c;Beatles 团队已经开始忙碌起来了。 几个事情要向诸位汇报一下&#xff1a; 一、新增百度小程序、支付宝小程序 发布alpha版本支持百度小程序、支付宝小程序&#xff0c;已有项目可以无缝直接运行在新增平台&#xff0c;欢迎安装试用&…

C#中4种深拷贝方法介绍

概述为什么要用到深拷贝呢&#xff1f;比如我们建了某个类Person&#xff0c;并且实例化出一个对象&#xff0c;然后&#xff0c;突然需要把这个对象复制一遍&#xff0c;并且复制出来的对象要跟之前的一模一样&#xff0c;来看下我们一般会怎么做。1、利用反射实现public stat…

kaggle入门项目:Titanic存亡预测(三)数据可视化与统计分析

---恢复内容开始--- 原kaggle比赛地址&#xff1a;https://www.kaggle.com/c/titanic 原kernel地址&#xff1a;A Data Science Framework: To Achieve 99% Accuracy Step 4: Perform Exploratory Analysis with Statistics 使用描述性与图表分析数据&#xff0c;重点在于数据可…

docker遇到问题归纳

/bin/sh^M: bad interpreter #在win下编辑的时候&#xff0c;换行结尾是\n\r &#xff0c; 而在linux下 是\n&#xff0c;所以才会有 多出来的\r #可以用以下方式解决先在控制台cd到报错的目录#编辑报错的那个文件 vi xxx.sh#利用如下命令查看文件格式 :set ff 或 :set filef…

faster rcnn训练过程讲解

http://blog.csdn.net/u014696921/article/details/60321425

firefox 扩展_如何检查您的扩展程序是否将停止与Firefox 57一起使用

firefox 扩展With Firefox 57, scheduled for release in November 14, 2017, Mozilla will end support for legacy extensions, and only support newer WebExtensions. Here’s how to check if your extensions will stop working—and how to keep using them after Novem…

《构建之法》 读书笔记

《构建之法》 读书笔记 娄雨禛 PB16060356 第一部分 关于结对编程的体悟与实践 在结对编程这一部分我曾讲过很多的注意点&#xff0c;比如代码变量命名风格、缩进风格、注释风格&#xff0c;前后语句次序风格&#xff0c;等等。然而这里还有一些新的东西。代码风格这个老掉牙的…

边缘服务网格 osm-edge

本文篇幅稍长&#xff0c;阅读本文将了解以下内容&#xff1a;•什么是 osm-edge 及其产生背景•边缘计算与中心云计算的差异&#xff0c;以及带来的挑战•osm-edge 的设计及采用的技术•5 分钟快速体验边缘服务网格关于 osm-edgeosm-edge 是针对边缘计算环境设计的服务网格&am…

powershell获取exe文件返回值

一、目的 1.powershell能简单写一些小脚本&#xff0c;不需要exe开发这么笨重。 2.在windows实现某个特定功能&#xff0c;做成一个exe能方便查看管理。 二、实现 1.C# code 运行结束加入返回值 Environment.ExitCode 1; //自定义数字 2.powershell 调用并获取 需要增加…

自定义ViewGroup实现仿微信图片选择器

先求一个windows版本的gif制作工具&#xff01;&#xff01;&#xff01; 这个代码只是做了简单的选择功能&#xff0c;图片的压缩与展示没做。可以自己在接口的方法中去实现。 写这个自定义view的初衷是为了学习LayoutParams&#xff0c;参考博客&#xff1a;http://www.jians…

[PHP] 多表外连接性能测试及优化

原文&#xff1a;https://blog.csdn.net/tang_huan_11/article/details/41925639 版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请附上博文链接&#xff01;转载于:https://www.cnblogs.com/0616--ataozhijia/p/10364188.html