的属性 获取android_android 获取相册 属性 - CSDN
  • Android设备有很多系统属性,比如说Android版本号,比如品牌,型号,比如厂商操作系统的版本号等,我们经常会要用到这些属性,那怎么获取呢? 最简单的办法,就是连接USB调试后,在命令行输入 adb shell getprop ...

    Android设备有很多系统属性,比如说Android版本号,比如品牌,型号,比如厂商操作系统的版本号等,我们经常会要用到这些属性,那怎么获取呢?

    最简单的办法,就是连接USB调试后,在命令行输入 adb shell getprop xxx查看结果,其中xxx是系统属性名称。当然我们首先得知道这个属性名称才行。
    但是如果我们不只是要看到结果,还要在代码里动态获取并且使用,该怎么办呢?可以用如下几个办法:

    一、android.os.Build这个类里有很多静态属性,如下属性我们可以直接用Build.XXX来得到:

    Build.BOARD // 主板
    Build.BRAND // 系统定制商
    Build.SUPPORTED_ABIS //CPU指令集
    Build.DEVICE // 设备参数
    Build.DISPLAY // 显示屏参数
    Build.FINGDERPRINT // 唯一编号
    Build.SERIAL // 硬件序列号
    Build.ID // 修订版本列表
    Build.MANUFACTURER // 硬件制造商
    Build.MODEL //版本
    Build.HARDWARE //硬件名
    Build.PRODUCT //手机产品名
    Build.TAGS // 描述build的标签
    Build.TYPE // Builder类型
    Build.VERSION.CODENAME //当前开发代号
    Build.VERSION.INCREMENTAL //源码控制版本号
    Build.VERSION.RELEASE //版本字符串
    Build.VERSION.SDK_INT //Android版本号
    Build.HOST // HOST值
    Build.USER // User名
    Build.TIME // 编译时间

    比如我们想获取Android版本号,可以直接调用Build.VERSION.SDK_INT来获取。

    二、另外还有些属性可以通过System.getProperty(“xxx”)来获取:

    os.version // OS版本号
    os.name // OS名称
    os.arch // OS架构
    user.home //home属性
    user.name // name属性
    user.dir //dir属性
    user.timezone //时区
    path.separator //路径分隔符
    line.separator // 行文分隔符
    file.separator //文件分隔符
    Java.vendor.url // Java vender URL属性
    java.class.path // Java Class路径
    java.class.version // Java class版本
    java.vendor // java vender 属性
    java.version // Java 版本
    java.home // Java Home 属性

    比如System.getProperty(“os.name”)得到的结果为“Linux”。

    三、获取厂商特有属性

    比如我们想获取华为手机的EMUI版本号,获取小米手机的MIUI版本号,可以通过如下方式:
    方法1:

    public static String getSystemProperty(String propName) {
        String line;
        BufferedReader input = null;
        try {
            Process p = Runtime.getRuntime().exec("getprop " + propName);
            input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
            line = input.readLine();
            input.close();
        } catch (IOException ex) {
            return null;
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return line;
    }

    比如获取miui版本号,miui版本号的属性名称为“ro.miui.ui.version.code”,所以通过getSystemProperty(“ro.miui.ui.version.code”)就可以得到,结果例如。

    方法2:通过反射的方法获取

        public static String getProp(String propName) {
            Class<?> classType = null;
            String buildVersion = null;
            try {
                classType = Class.forName("android.os.SystemProperties");
                Method getMethod = classType.getDeclaredMethod("get", new Class<?>[]{String.class});
                buildVersion = (String) getMethod.invoke(classType, new Object[]{propName});
            } catch (Exception e) {
                e.printStackTrace();
            }
            return buildVersion;
        }

    华为的EMUI的版本号属性名称为”ro.build.version.emui”,因此调用getProp(“ro.build.version.emui”)就可以显示EMUI版本号,结果例如“EmotionUI_4.1”。

    以上内容参考自:
    https://www.jianshu.com/p/dacf0faf1033
    https://blog.csdn.net/devilkin64/article/details/19415717
    https://www.cnblogs.com/yjing/p/6654019.html

    展开全文
  • android 控件属性大全

    2018-06-06 16:26:59
    Android控件属性大全”: &nbsp; 关键词:android&nbsp;控件&nbsp;属性&nbsp;大全 &nbsp; &nbsp; 控件属性android属性 android功能强大,界面华丽,但是众多的布局属性就害苦了开发者...

    “Android控件属性大全”:

     

    关键词android 控件 属性 大全

     

     

    控件属性:

    android属性

    android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,

    第一类:属性值为true或false
    android:layout_centerhrizontal  水平居中
    android:layout_centervertical   垂直居中
    android:layout_centerinparent    相对于父元素完全居中
    android:layout_alignparentbottom 贴紧父元素的下边缘
    android:layout_alignparentleft   贴紧父元素的左边缘
    android:layout_alignparentright  贴紧父元素的右边缘
    android:layout_alignparenttop    贴紧父元素的上边缘
    android:layout_alignwithparentifmissing  如果对应的兄弟元素找不到的话就以父元素做参照物
    第二类:属性值必须为id的引用名“@id/id-name”
    android:layout_below      在某元素的下方
    android:layout_above      在某元素的的上方
    android:layout_toleftof   在某元素的左边
    android:layout_torightof  在某元素的右边
    android:layout_aligntop   本元素的上边缘和某元素的的上边缘对齐
    android:layout_alignleft  本元素的左边缘和某元素的的左边缘对齐
    android:layout_alignbottom 本元素的下边缘和某元素的的下边缘对齐
    android:layout_alignright  本元素的右边缘和某元素的的右边缘对齐 

    第三类:属性值为具体的像素值,如30dip,40px
    android:layout_marginbottom       离某元素底边缘的距离
    android:layout_marginleft         离某元素左边缘的距离
    android:layout_marginright        离某元素右边缘的距离
    android:layout_margintop          离某元素上边缘的距离

    edittext的android:hint  设置edittext为空时输入框内的提示信息。
    android:gravity 
    android:gravity属性是对该view 内容的限定.比如一个button 上面的text.  你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity=”right”则button上面的文字靠右
    android:layout_gravity
    android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity=”right”则button靠右
    android:scaletype:
    android:scaletype是控制图片如何resized/moved来匹对imageview的size。imageview.scaletype / android:scaletype值的意义区别:
    center /center  按图片的原来size居中显示,当图片长/宽超过view的长/宽,则截取图片的居中部分显示
    center_crop / centercrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于view的长(宽)
    center_inside / centerinside  将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于view的长/宽
    fit_center / fitcenter  把图片按比例扩大/缩小到view的宽度,居中显示
    fit_end / fitend   把图片按比例扩大/缩小到view的宽度,显示在view的下部分位置
    fit_start / fitstart  把图片按比例扩大/缩小到view的宽度,显示在view的上部分位置
    fit_xy / fitxy  把图片不按比例扩大/缩小到view的大小显示
    matrix / matrix 用矩阵来绘制,动态缩小放大图片来显示。
    ** 要注意一点,drawable文件夹里面的图片命名是不能大写的。
    ————————————————————————————————————————————————————-
    android:id
    为控件指定相应的id
    android:text
    指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串
    android:gravity
    指定view组件的对齐方式,比如说居中,居右等位置 这里指的是控件中的文本位置并不是控件本身
    android:layout_gravity
    指定container组件的对齐方式.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为 例,android:layout_gravity=”right”则button靠右
    android:textsize
    指定控件当中字体的大小
    android:background
    指定该控件所使用的背景色,rgb命名法
    android:width
    指定控件的宽度
    android:height
    指定控件的高度
    android:layout_width
    指定container组件的宽度
    android:layout_height
    指定container组件的高度
    android:layout_weight
    view中很重要的属性,按比例划分空间
    android:padding*
    指定控件的内边距,也就是说控件当中的内容
    android:sigleline
    如果设置为真的话,则控件的内容在同一行中进行显示
    android:scaletype
    是控制图片如何resized/moved来匹对imageview的siz
    android:layout_centerhrizontal
    水平居中
    android:layout_centervertical
    垂直居中
    android:layout_centerinparent
    相对于父元素完全居中
    android:layout_alignparentbottom
    贴紧父元素的下边缘
    android:layout_alignparentleft
    贴紧父元素的左边缘
    android:layout_alignparentright
    贴紧父元素的右边缘
    android:layout_alignparenttop
    贴紧父元素的上边缘
    android:layout_alignwithparentifmissing
    如果对应的兄弟元素找不到的话就以父元素做参照物
    android:layout_below
    在某元素的下方
    android:layout_above
    在某元素的的上方
    android:layout_toleftof
    在某元素的左边
    android:layout_torightof
    在某元素的右边
    android:layout_aligntop
    本元素的上边缘和某元素的的上边缘对齐
    android:layout_alignleft
    本元素的左边缘和某元素的的左边

     

    此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com

    缘对齐
    android:layout_alignbottom
    本元素的下边缘和某元素的的下边缘对齐
    android:layout_alignright
    本元素的右边缘和某元素的的右边缘对齐
    android:layout_marginbottom
    离某元素底边缘的距离
    android:layout_marginleft
    离某元素左边缘的距离
    android:layout_marginright
    离某元素右边缘的距离
    android:layout_margintop
    离某元素上边缘的距离
    android:paddingleft
    本元素内容离本元素右边缘的距离
    android:paddingright
    本元素内容离本元素上边缘的距离
    android:hint
    设置edittext为空时输入框内的提示信息
    android:linearlayout
    它确定了linearlayout的方向,其值可以为vertical, 表示垂直布局horizontal, 表示水平布局

    —————————————————————————————————————————————————–
    android:interpolator
    可能有很多人不理解它的用法,文档里说的也不太清楚,其实很简单,看下面:interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。用通俗的一点的话理解就是:动画的进度使用 interpolator 控制。interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。interpolator 是基类,封装了所有 interpolator 的共同方法,它只有一个方法,即 getinterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。android 提供了几个 interpolator 子类,实现了不同的速度曲线,如下:
    acceleratedecelerateinterpolator        在动画开始与介绍的地方速率改变比较慢,在中间的时侯加速
    accelerateinterpolator        在动画开始的地方速率改变比较慢,然后开始加速
    cycleinterpolator        动画循环播放特定的次数,速率改变沿着正弦曲线
    decelerateinterpolator        在动画开始的地方速率改变比较慢,然后开始减速
    linearinterpolator        在动画的以均匀的速率改变
    对于 linearinterpolator ,变化率是个常数,即 f (x) = x.
    public float getinterpolation(float input) {
    return input;
    }
    interpolator其他的几个子类,也都是按照特定的算法,实现了对变化

     

    此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com

    率。还可以定义自己的 interpolator 子类,实现抛物线、自由落体等物理效果。 

     

     

     

     

    textview属性汇总

    android:autolink设置是否当文本为url链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)

    android:autotext如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。

    android:buffertype指定gettext()方式取得的文本类别。选项editable 类似于stringbuilder可追加字符,也就是说gettext后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式,参见这里1、这里2。

    android:capitalize设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见editview此属性说明。

    android:cursorvisible设定光标为显示/隐藏,默认显示。

    android:digits设置允许输入哪些字符。如“1234567890.+-*/% ()”

    android:drawablebottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。

    android:drawableleft在text的左边输出一个drawable,如图片。

    android:drawablepadding设置text与drawable(图片)的间隔,与drawableleft、 drawableright、drawabletop、drawablebottom一起使用,可设置为负数,单独使用没有效果。

    android:drawableright在text的右边输出一个drawable。

    android:drawabletop在text的正上方输出一个drawable。

    android:editable设置是否可编辑。

    android:editorextras设置文本的额外的输入数据。

    android:ellipsize设置当文字过长时,该控件该如何显示。有如下值设置:”start”—-省略号显示在开头;”end” ——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)

    android:freezestext设置保存文本的内容以及光标的位置。

    android:gravity设置文本位置,如设置成“center”,文本将居中显示。

    android:hinttext为空时显示的文字提示信息,可通过textcolorhint设置提示信息的颜色。此属性在 editview中使用,但是这里也可以用。

    android:imeoptions附加功能,设置右下角ime动作与编辑框相关的动作,如actiondone右下角将显示一个“完成”,而不设置默认是一个回车符号。这个在editview中再详细说明,此处无用。

    android:imeactionid设置ime动作id。

    android:imeactionlabel设置ime动作标签。

    android:includefontpadding设置文本是否包含顶部和底部额外空白,默认为true。

    android:inputmethod为文本指定输入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是这里报错找不到。

    android:inputtype设置文本的类型,用于帮助输入法显示合适的键盘类型。在editview中再详细说明,这里无效果。

    android:linksclickable设置链接是否点击连接,即使设置了autolink。

    android:marqueerepeatlimit在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为 marquee_forever时表示无限次。

    android:ems设置textview的宽度为n个字符的宽度。这里测试为一个汉字字符宽度

    android:maxems设置textview的宽度为最长为n个字符的宽度。与ems同时使用时覆盖ems选项。

    android:minems设置textview的宽度为最短为n个字符的宽度。与ems同时使用时覆盖ems选项。

    android:maxlength限制显示的文本长度,超出部分不显示。

    android:lines设置文本的行数,设置两行就显示两行,即使第二行没有数据。

    android:maxlines设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。

    android:minlines设置文本的最小行数,与lines类似。

    android:linespacingextra设置行间距。

    android:linespacingmultiplier设置行间距的倍数。如”1.2”

    android:numeric如果被设置,该textview有一个数字输入法。此处无用,设置后唯一效果是textview有点击效果,此属性在edtiview将详细说明。

    android:password 以小点”.”显示文本

    android:phonenumber设置为电话号码的输入方式。

    android:privateimeoptions设置输入法选项,此处无用,在edittext将进一步讨论。

    android:scrollhorizontally设置文本超出textview的宽度的情况下,是否出现横拉条。

    android:selectallonfocus如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。 textview中设置后无效果。

    android:shadowcolor指定文本阴影的颜色,需要与shadowradius一起使用。

    android:shadowdx设置阴影横向坐标开始位置。

    android:shadowdy设置阴影纵向坐标开始位置。

    android:shadowradius设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。

    android:singleline设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text=”test_ singleline ”

    android:singleline=”true” android:layout_width=”20dp”将只显示“t…”。如果不设置singleline或者设置为false,文本将自动换行

    android:text设置显示文本.

    android:textappearance设置文字外观。如 “?android:attr/textappearancelargeinverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可textappearancebutton/textappearanceinverse/textappearancelarge/textappearancelargeinverse/textappearancemedium/textappearancemediuminverse/textappearancesmall/textappearancesmallinverse

    android:textcolor设置文本颜色

    android:textcolorhighlight被选中文字的底色,默认为蓝色

    android:textcolorhint设置提示信息文字的颜色,默认为灰色。与hint一起使用。

    android:textcolorlink文字链接的颜色.

    android:textscalex设置文字之间间隔,默认为1.0f。

    android:textsize设置文字大小,推荐度量单位”sp”,如”15sp”

    android:textstyle设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“|”隔开

    android:typeface设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3]

    android:height设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)

    android:maxheight设置文本区域的最大高度

    android:minheight设置文本区域的最小高度

    android:width设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width 的区别看这里。

    android:maxwidth设置文本区域的最大宽度

    android:minwidth设置文本区域的最小宽度

     

    android activity属性汇总

    android:allowtaskreparenting

    是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务。

    android:alwaysretaintaskstate

    是否保留状态不变, 比如切换回home, 再从新打开, activity处于最后的状态

    android:cleartaskonlanunch

    比如 p 是 activity, q 是被p 触发的 activity, 然后返回home, 从新启动 p,是否显示 q

    android:configchanges

    当配置list发生修改时,是否调用 onconfigurationchanged() 方法 比如 “locale|navigation|orientation”.

    android:enabled

    activity 是否可以被实例化,

    android:excludefromrecents

    是否可被显示在最近打开的activity列表里

    android:exported

    是否允许activity被其它程序调用

    android:finishontasklaunch

    是否关闭已打开的activity当用户重新启动这个任务的时候

    android.icon

    android:label

    android:launchmode

    activity启动方式, “standard” “singletop” “singletask” “singleinstance”

    其中前两个为一组, 后两个为一组

    android:multiprocess

    允许多进程

    android:name

    activity的类名, 必须指定

    androidnhistory

    是否需要移除这个activity当用户切换到其他屏幕时。这个属性是 api level 3 中引入的

    android:permission

    android:process

    一 个activity运行时所在的进程名,所有程序组件运行在应用程序

     

    此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com

    认的进程中,这个进程名跟应用程序的包名一致。中的元素process属性能够为所有组件设定一个新的默认值。但是任何组件都可以覆盖这个默认值,允许你将你的程序放在多进程中运行。 如果这个属性被分配的名字以:开头,当这个activity运行时, 一个新的专属于这个程序的进程将会被创建。如果这个进程名以小写字母开头,这个activity将会运行在全局的进程中,被它的许可所提供。

     

    android:screenorientation

    activity显示的模式, “unspecified” 默认值 “landscape” 风景画模式,宽度比高度大一些 “portrait” 肖像模式, 高度比宽度大。 “user” 用户的设置 “behind” “sensor” “nosensor”

    android:statenotneeded

    是否 activity被销毁和成功重启并不保存状态

    android:taskaffinity

    activity的亲属关系, 默认情况同一个应用程序下的activity有相同的关系

    android:theme

    activity的样式主题, 如果没有设置,则activity的主题样式从属于应用程序,参见元素的theme属性

    android:windowsoftinputmode

    activity主窗口与软键盘的交互模式, 自从api level 3 被引入

    活动的主窗口如何与包含屏幕上的软键盘窗口交互。这个属性的设置将会影响两件事情:

    1>     软键盘的状态——是否它是隐藏或显示——当活动(activity)成为用户关注的焦点。

    2>     活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的。

    它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如: <activity android:windowsoftinputmode=”statevisible|adjustresize” . . . >

    在这设置的值(除”stateunspecified”和”adjustunspecified”以外)将覆盖在主题中设置的值

    值 描述

     “stateunspecified” 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件其他 盘行为默认的设置。

     

    “stateunchanged” 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

     “statehidden” 当用户选择该activity时,软键盘被隐藏——也就是,当用户确定导航到该activity时,而不是返回到它由于离开另一个activity。

     “statealwayshidden” 软键盘总是被隐藏的,当该activity主窗口获取焦点时。

     “statevisible” 软键盘是可见的,当那个是正常合适的时(当用户导航到activity主窗口时)。

     “statealwaysvisible” 当用户选择这个activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该activity时,而不是返回到它由于离开另一个activity。

     

    “adjustunspecified” 它不被指定是否该activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。

     

    “adjustresize” 该activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。

     

    “adjustpan” 该activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

     

    android edittext 属性汇总

    android:layout_gravity=”center_vertical”

    设置控件显示的位置:默认top,这里居中显示,还有bottom

    android:hint=”请输入数字!”

    设置显示在空间上的提示信息

    android:numeric=”integer”

    设置只能输入整数,如果是小数则是:decimal

    android:singleline=”true”

    设置单行输入,一旦设置为true,则文字不会自动换行。

    android:password =”true”

    设置只能输入密码

    android:textcolor = ”#ff8c00”

    字体颜色

    android:textstyle=”bold”

    字体,bold, italic, bolditalic

    android:textsize=”20dip”

    大小

    android:capitalize = “characters”

    以大写字母写

    android:textalign=”center”

    edittext没有这个属性,但textview有

    android:textcolorhighlight=”#cccccc”

    被选中文字的底色,默认为蓝色

    android:textcolorhint=”#ffff00”

    设置提示信息文字的颜色,默认为灰色

    android:textscalex=”1.5”

    控制字与字之间的间距

    android:typeface=”monospace”

    字型,normal, sans, serif, monospace

    android:background=”@null”

    空间背景,这里没有,指透明

    android:layout_weight=”1”

    权重,控制控件之间的地位,在控制控件显示的大小时蛮有用的。

    android:textappearance=”?android:attr/textappearancelargeinverse”

    文字外观,这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。不知道这样理解对不对?

     

    通过edittext的layout xml文件中的相关属性来实现: 

      1. 密码框属性 android:password =”true”  这条可以让edittext显示的内容自动为星号,输入时内容会在1秒内变成*字样。

      2. 纯数字 android:numeric=”true” 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入

      3. 仅允许 android:capitalize=”cwj1987” 这样仅允许接受输入cwj1987,一般用于密码验证

      下面是一些扩展的风格属性

      android:editable=”false” 设置edittext不可编辑

      android:singleline=”true” 强制输入的内容在单行

      android:ellipsize=”end” 自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时

     

     

    relativelayout布局 

     

    android:layout_margintop=”25dip” //顶部距离 

    android:gravity=”left” //空间布局位置 

    android:layout_marginleft=”15dip //距离左边距 

     

    // 相对于给定id控件 

    android:layout_above 将该控件的底部置于给定id的控件之上; 

    android:layout_below 将该控件的底部置于给定id的控件之下; 

    android:layout_toleftof    将该控件的右边缘与给定id的控件左边缘对齐; 

    android:layout_torightof  将该控件的左边缘与给定id的控件右边缘对齐; 

    android:layout_alignbaseline  将该控件的baseline与给定id的baseline对齐; 

    android:layout_aligntop        将该控件的顶部边缘与给定id的顶部边缘对齐; 

    android:layout_alignbottom   将该控件的底部边缘与给定id的底部边缘对齐; 

    android:layout_alignleft        将该控件的左边缘与给定id的左边缘对齐; 

    android:layout_alignright      将该控件的右边缘与给定id的右边缘对齐; 

     

    // 相对于父组件 

    android:layout_alignparenttop      如果为true,将该控件的顶部与其父控件的顶部对齐; 

    android:layout_alignparentbottom 如果为true,将该控件的底部与其父控件的底部对齐; 

    android:layout_alignparentleft      如果为true,将该控件的左部与其父控件的左部对齐; 

    android:layout_alignparentright    如果为true,将该控件的右部与其父控件的右部对齐; 

     

    // 居中 

    android:layout_centerhorizontal 如果为true,将该控件的置于水平居中; 

    android:layout_centervertical     如果为true,将该控件的置于垂直居中; 

    android:layout_centerinparent   如果为true,将该控件的置于父控件的中央; 

     

    // 指定移动像素 

    android:layout_margintop      上偏移的值; 

    android:layout_marginbottom 下偏移的值; 

    android:layout_marginleft   左偏移的值; 

    android:layout_marginright   右偏移的值;

     

    android:id  — 为控件指定相应的id 

    android:text — 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串 

    android:grivity — 指定控件的基本位置,比如说居中,居右等位置这里指的是控件中的文本位置并不是控件本身。 

    android:textsize — 指定控件当中字体的大小 

    android:background — 指定该控件所使用的背景色,rgb命名法 

    android:width — 指定控件的宽度 

    android:height — 指定控件的高度 

    android:padding* — 指定控件的内边距,也就是说控件当中的内容 

    android:sigleline — 如果设置为真的话,则控件的内容在同一行中进行显示 

     

    下边是相对布局属性的说明:relativelayout 

     

    android:layout_above 将该控件的底部至于给定id控件之上 

    android:layout_below 将该控件的顶部至于给定id的控件之下 

    android:layout_toleftof 将该控件的右边缘和给定id的控件左边缘对齐 

    android:layout_torightof 将该控件的左边缘和给定id的控件的右边缘对齐 

     

    android:layout_alignbaseline 该控件的baseline和给定id的控件的baseline对齐 

    android:layout_alignbottom 将该控件的底部边缘与给定id控件的底部边缘对齐 

    android:layout_alignleft 将该控件的左边缘与给定id控件的左边缘对齐 

    android:layout_alignright 将该控件的右边缘与给定id控件的右边缘对齐 

    android:layout_aligntop 将该控件的顶部边缘与给定id控件的顶部对齐 

     

    android:alignparentbottom 如果该值为true,则将该控件的底部和父控件的底部对齐 

    android:layout_alignparentleft 如果该值为true,则将该控件左边与父控件的左边对齐 

    android:layout_alignparentright 如果该值为true,则将该控件的右边与父控件的右边对齐 

    android:layout_alignparenttop 如果该值为true,则将该控件的顶部与父控件的顶部对齐 

     

    android:layout_centerhorizontal 如果为真,该控件将被至于水平方向的中央 

    android:layout_centerinparent 如果为真,该控件将被至于父控件水平方向和垂直方向的中央 

    android:layout_centervertical 如果为真,该控件将被至于垂直方向的中央 

    android:layout_marginleft此属性用来设置控件之间的间隙(控件和控件之间和内边距不同) 

    android:padding=”3dip”说明了四边的内边距是3dip 

                  

     

    tablelayout 

     

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

        android:orientation=”vertical” 

       android:layout_width=”fill_parent” 

      android:layout_height=”fill_parent” 

        android:stretchcolumns=”0” 

        ></tablelayout> 

     

    android:stretchcolumns=”0”第一列作为拉伸列填满整行 

    java中修饰符总结:

     

    1、访问控制修饰符

    public的访问级别是最高的,其次是protected、默认和private

    成员变量和成员方法可以处于4个访问级别中的一个:公开、受保护、默认或私有

    顶层类可以处于公开或默认级别,顶层类不能被protected和private修饰

    局部变量不能被访问控制修饰符修饰

    2、abstract修饰符

    抽象类不能被实例化

    抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象方法

    如果子类没有实现父类中所有的抽象方法,子类也必须定义为抽象类

    抽象类不能被定义为private、final、和static类型

    没有抽象的构造方法

    抽象方法没有方法体

    3、final修饰符

    用final修饰的类不能被继承

    用final修饰的方法不能被子类的方法覆盖

    private类型的方法都默认为是final方法,因而不能被子类的方法覆盖

    final变量必须被显式初始化,并且只能被赋值一次值

     

     

    搜索此文相关文章:安卓Android 控件属性大全

     


    此文链

    展开全文
  • 自定义属性的定义与获取,看了hyman老师的Android制作微信6.0界面,以及Android制作的QQ5.0侧滑菜单,深有感触,感觉学到了不少的东西,两个项目里面都运用到了android属性的定义与获取,所以想在CSDN博客中做下总结...

                  自定义属性的定义与获取,看了hyman老师的Android制作微信6.0界面,以及Android制作的QQ5.0侧滑菜单,深有感触,感觉学到了不少的东西,两个项目里面都运用到了android属性的定义与获取,所以想在CSDN博客中做下总结,方便自己以后不是很熟悉的时候来回顾一下!

    以下是关于Android自定义属性的的使用步骤

    1.首先定义自定义属性。

    2.其次在组件中使用自定义属性,为属性赋值。

    3.在java代码中获取自定义属性,并使用属性值。


    以上是简单的过程,下面对过程进行详述:


    1.1资源文件res中的values文件夹中自定义一个名为attrs.xml形式的文件,

          其中资源文件根节点为<resources></resource>里面拥有的子节点可以为<attr> ,<declare-styleable>,

      

        1.1.1   <attr>节点

         attr节点的属性有name,format.

         name就是给自定义属性命名的,最好能做到见明知意,

         关于format是给自定义的属性定义一个类型,有以下的类型

         -reference  引用类型 比如说自定义图片属性<attr name="icon" format="reference"></attr>

         -color         颜色类型  用来自定义颜色的类型

          -string       字符串类型  。。

          -demension 尺寸类型   用来定义尺寸类型

          -  

          -  

       1.1.2 <declare-styleable>节点

        declare-styleable节点也拥有子节点<attr>

        把<resource>节点内的子节点<attr>节点定义的自定义属性全部Copy到<declare-styleable>节点中,这个时候<declare-styleable>节点的子节点<attr>里面只需要name属性,自定义属性的format就可以去掉了(前提是你已经在resources节点下自定义属性节点中声明了format,当然你也可以在自定义属性的时候不声明fomat,在<declare-styleable>的子节点<attr>中来声明)。

       其中你需要给<declare-styleable>节点定义一个name属性,给name属性赋值,(自定义属性多用在自定义组件,所以这里最好使用自定义组件的名字)

       上面给name赋值,是为了使用自定义属性,是非常有意义的,而且是必须的。下面贴下代码加强理解

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <attr name="icon" format="reference"></attr>
        <attr name="color" format="color"></attr>
        <attr name="text" format="string"></attr>
        <attr name="text_size" format="dimension"></attr>
    
        <declare-styleable name="ChangeColorIconWithText">
            <attr name="icon"></attr>
            <attr name="color"></attr>
            <attr name="text"></attr>
            <attr name="text_size"></attr>
        </declare-styleable>
    
    </resources>



    2.1自定义属性完成后,接下来要使用自定义属性了

      首先我们来比较一下自定义属性与系统自带的属性,比如说

      

            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" >
       这些系统自带的属性 开头都是android: 他们的命名空间在

       

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

             这里我们要看到的是xmlns 意思是xml name space xml命名空间  在、、apk/res/android下面

    而这里我们自己使用自己的自定义属性 就必须要加入自己的命名空间,还是与自定义搭上边

      自定义命名空间的方法:

    xmlns:hyman="http://schemas.android.com/apk/res/com.imooc.weixin6_0"


    这里的hyman名字是自己取的,当然要和你的项目有关,然后与系统的提供的属性集合一样,我们只需要把res/后面的内容换掉,把android换成自己项目的包名。一定是自己项目的包名,不是java文件所在的包名。


     命名空间完毕,使用自己的自定义属性,给属性值赋值,贴代码

    其实我觉得使用自定义的属性的最重要的地方就是给自定义属性赋值,我们要利用的是值,自定义属性的都是容器,容器里面装的是值

        

    <com.imooc.weixin6_0.ChangeColorIconWithText
                android:id="@+id/id_indicator_one"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:padding="5dp"
                hyman:icon="@drawable/ic_menu_start_conversation"
                hyman:text="@string/app_name"
                hyman:text_size="12sp"
                hyman:color="#ff45c01a" />

       

            上面使用的自定义属性,使用提示的时候有时候、eclipse会给提示,有时候不会。


    3.1最后一步了,是时候在java代码中使用自定义的属性了,并获取自定义属性的值去进行一系列操作

          java代码中获取自定义的属性值我们就不得不说到两个重要的类的了,第一个重要的类是TypedArray,第二个重要的类是TypedValue

        3.1.1    TypedValued

            最近接触到这个类比较多,而且主要是它的像素单位转换功能,网上像素单位转换有不少方法,我也转了博文,下面就不在赘述,我把博文的链接贴下面了


    http://blog.csdn.net/qq_24868901/article/details/45022903


    但是其中的dip(dp)转px的问题我还是要说一下

      怎么说呢,用个不是很精确的表达就是 在android中  比如下面以调语句

    int viewWidth=50;  

    如果上面的自被应用到显示方面的问题,它的基本单位是px(自己琢磨,如果有问题请评论哈,谢谢)


      但是应用px呢会造成不同的设备上面出现显示的不同效果,但是dp则不会,它会根据不同的设备来得到一个合适的像素值 (不然dp 也不会是device independent pixels)也就是设备独立像素。

    为了达到一个app界面在不同的手机上显示合适的大小,所以要将dp转换为px ,不同的设备转换数字会不同

      在三星S4中   50dp=150px

      在MX3中    50dp=137px  (我拿鸟哥 和我的手机测出的!)


    3.1.2  TypedArray

        TypedArray类这个类我也在转过博客,

       主要在这里说下怎么用TypedArray来获取自定义属性在java中

      首先

        

    TypedArray a = context.obtainStyledAttributes(attrs,
    				R.styleable.ChangeColorIconWithText);
    通过上下文context对象调用obtainStyleAttributes()方法来得到TyedArray 对象  (这个时候我们给<declare-styleable>节点命名终于派上用场了)

        然后

    int n = a.getIndexCount();

    通过TypedArray对象获取一共使用了几个自定义的属性获取了自定义属性就可以调用for和switch语句了


    for (int i = 0; i < n; i++)
    		{
    			int attr = a.getIndex(i);
    			switch (attr)
    			{
    			case R.styleable.ChangeColorIconWithText_icon:
    				BitmapDrawable drawable = (BitmapDrawable) a.getDrawable(attr);
    				mIconBitmap = drawable.getBitmap();
    				break;
    			case R.styleable.ChangeColorIconWithText_color:
    				mColor = a.getColor(attr, 0xFF45C01A);
    				break;
    			case R.styleable.ChangeColorIconWithText_text:
    				mText = a.getString(attr);
    				break;
    			case R.styleable.ChangeColorIconWithText_text_size:
    				mTextSize = (int) a.getDimension(attr, TypedValue
    						.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12,
    								getResources().getDisplayMetrics()));
    				break;
    			}
    
    		}

    用完TypedArray后别忘了
    a.recycle();

    最后一点要说明的是在自定义的组件中使用自定义属性的时候,系统会默认调用3个参数的构造方法,当未使用自定义属性的时候会默认的调用2个参数的构造方法,上面的代码一般是写在3个参数的构造方法中

    (hyman老师在讲QQ5.0侧滑菜单的时候是这么说的,后来更正了这个错误,就算使用自定义属性也是调用两个参数的构造方法)


    public ChangeColorIconWithText(Context context, AttributeSet attrs,
    			int defStyleAttr)


    其中利用TypedArray对象来获取索引,以上代码。。

    这里贴一张更加精简的获取自定义属性的方法(朋友截图)这个方法更加的精简


    通过TypedArray对象的getXxxx()方法来获取自定义属性值,getDrawable()和getColor()和getDimension()
    方法都有一个默认值的参数,就是获取不到值的时候就使用默认值。 

    最后一个getDimension默认值的意思是将12sp转换成?px;


      

    到这里Android自定义属性和属性值得获取就结束了。

    关于这个方法我想做一个总结

    • 首先Android的思想也就是把数据定义与代码的操作分开的思想就很让我觉得非常牛X了,自定义属性更加让Android代码整洁美观,方便维护与修改
    • 其次自定义属性可以可以避免一些麻烦,比如说上述的关于像素单位的问题,如果在java代码中定义一个dp单位像素值,必须要使用工具方法来进行转换成px,自定义属性可以避免这个麻烦(不过在getDimension()默认值参数中要转换,这是必须的。除非你指定的就是一个px,避免不掉的麻烦)。


    展开全文
  • 1、引言 对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现: 自定义一个CustomView(extends View )类 编写values/attrs.xml,在其中...在CustomView的构造方法中通过TypedArray获取 ps:如果你对上

    转载请标明出处:
    http://blog.csdn.net/lmj623565791/article/details/45022631
    本文出自:【张鸿洋的博客】

    1、引言

    对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现:

    1. 自定义一个CustomView(extends View )类
    2. 编写values/attrs.xml,在其中编写styleable和item等标签元素
    3. 在布局文件中CustomView使用自定义的属性(注意namespace)
    4. 在CustomView的构造方法中通过TypedArray获取

    ps:如果你对上述几个步骤不熟悉,建议先熟悉下,再继续~

    那么,我有几个问题:

    • 以上步骤是如何奏效的?
    • styleable 的含义是什么?可以不写嘛?我自定义属性,我声明属性就好了,为什么一定要写个styleable呢?
    • 如果系统中已经有了语义比较明确的属性,我可以直接使用嘛?
    • 构造方法中的有个参数叫做AttributeSet
      (eg: MyTextView(Context context, AttributeSet attrs) )这个参数看名字就知道包含的是参数的数组,那么我能不能通过它去获取我的自定义属性呢?
    • TypedArray是什么鬼?从哪冒出来的,就要我去使用?

    恩,针对这几个问题,大家可以考虑下,如何回答呢?还是说:老子会背上述4个步骤就够了~~

    2、常见的例子

    接下来通过例子来回答上述问题,问题的回答顺序不定~~大家先看一个常见的例子,即上述几个步骤的代码化。

    • 自定义属性的声明文件
        <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <declare-styleable name="test">
            <attr name="text" format="string" />
            <attr name="testAttr" format="integer" />
        </declare-styleable>
    
    </resources>
    • 自定义View类
    package com.example.test;
    
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.View;
    
    public class MyTextView extends View {
    
        private static final String TAG = MyTextView.class.getSimpleName();
    
        public MyTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
    
            TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.test);
    
            String text = ta.getString(R.styleable.test_testAttr);
            int textAttr = ta.getInteger(R.styleable.test_text, -1);
    
            Log.e(TAG, "text = " + text + " , textAttr = " + textAttr);
    
            ta.recycle();
        }
    
    }
    • 布局文件中使用
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:zhy="http://schemas.android.com/apk/res/com.example.test"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <com.example.test.MyTextView
            android:layout_width="100dp"
            android:layout_height="200dp"
            zhy:testAttr="520"
            zhy:text="helloworld" />
    
    </RelativeLayout>

    ok,大家花3s扫一下,运行结果为:

     MyTextView: text = helloworld , textAttr = 520

    应该都不意外吧,注意下,我的styleable的name写的是test,所以说这里并不要求一定是自定义View的名字。

    3、AttributeSet与TypedArray

    下面考虑:

    构造方法中的有个参数叫做AttributeSet(eg: MyTextView(Context context, AttributeSet attrs) )这个参数看名字就知道包含的是参数的集合,那么我能不能通过它去获取我的自定义属性呢?

    首先AttributeSet中的确保存的是该View声明的所有的属性,并且外面的确可以通过它去获取(自定义的)属性,怎么做呢?
    其实看下AttributeSet的方法就明白了,下面看代码。

    public MyTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
    
            int count = attrs.getAttributeCount();
            for (int i = 0; i < count; i++) {
                String attrName = attrs.getAttributeName(i);
                String attrVal = attrs.getAttributeValue(i);
                Log.e(TAG, "attrName = " + attrName + " , attrVal = " + attrVal);
            }
    
            // ==>use typedarray ...
    
        }
    

    输出:

    MyTextView(4136): attrName = layout_width , attrVal = 100.0dip
    MyTextView(4136): attrName = layout_height , attrVal = 200.0dip
    MyTextView(4136): attrName = text , attrVal = helloworld
    MyTextView(4136): attrName = testAttr , attrVal = 520
    

    结合上面的布局文件,你发现了什么?
    我擦,果然很神奇,真的获得所有的属性,恩,没错,通过AttributeSet可以获得布局文件中定义的所有属性的key和value(还有一些方法,自己去尝试),那么是不是说TypedArray这个鬼可以抛弃了呢?答案是:NO!

    现在关注下一个问题:

    TypedArray是什么鬼?从哪冒出来的,就要我去使用?

    我们简单修改下,布局文件中的MyTextView的属性。

    <com.example.test.MyTextView
            android:layout_width="@dimen/dp100"
            android:layout_height="@dimen/dp200"
            zhy:testAttr="520"
            zhy:text="@string/hello_world" />

    现在再次运行的结果是:

    MyTextView(4692): attrName = layout_width , attrVal = @2131165234
    MyTextView(4692): attrName = layout_height , attrVal = @2131165235
    MyTextView(4692): attrName = text , attrVal = @2131361809
    MyTextView(4692): attrName = testAttr , attrVal = 520
    >>use typedarray
    MyTextView(4692): text = Hello world! , textAttr = 520

    发现了什么?通过AttributeSet获取的值,如果是引用都变成了@+数字的字符串。你说,这玩意你能看懂么?那么你看看最后一行使用TypedArray获取的值,是不是瞬间明白了什么。

    TypedArray其实是用来简化我们的工作的,比如上例,如果布局中的属性的值是引用类型(比如:@dimen/dp100),如果使用AttributeSet去获得最终的像素值,那么需要第一步拿到id,第二步再去解析id。而TypedArray正是帮我们简化了这个过程。

    贴一下:如果通过AttributeSet获取最终的像素值的过程:

    int widthDimensionId =  attrs.getAttributeResourceValue(0, -1);
            Log.e(TAG, "layout_width= "+getResources().getDimension(widthDimensionId));
    

    ok,现在别人问你TypedArray存在的意义,你就可以告诉他了。

    4、declare-styleable

    我们已经解决了两个问题,接下来,我们看看布局文件,我们有一个属性叫做:zhy:text
    总所周知,系统提供了一个属性叫做:android:text,那么我觉得直接使用android:text更nice,这样的话,考虑问题:

    如果系统中已经有了语义比较明确的属性,我可以直接使用嘛?

    答案是可以的,怎么做呢?
    直接在attrs.xml中使用android:text属性。

        <declare-styleable name="test">
            <attr name="android:text" />
            <attr name="testAttr" format="integer" />
        </declare-styleable>

    注意,这里我们是使用已经定义好的属性,不需要去添加format属性(注意声明和使用的区别,差别就是有没有format)。
    然后在类中这么获取:ta.getString(R.styleable.test_android_text);布局文件中直接android:text="@string/hello_world"即可。

    这里提一下,系统中定义的属性,其实和我们自定义属性的方式类似,你可以在sdk/platforms/android-xx/data/res/values该目录下看到系统中定义的属性。然后你可以在系统提供的View(eg:TextView)的构造方法中发现TypedArray获取属性的代码(自己去看一下)。

    ok,接下来,我在想,既然declare-styleable这个标签的name都能随便写,这么随意的话,那么考虑问题:

    styleable 的含义是什么?可以不写嘛?我自定义属性,我声明属性就好了,为什么一定要写个styleable呢?

    其实的确是可以不写的,怎么做呢?

    • 首先删除declare-styleable的标签

    那么现在的attrs.xml为:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <attr name="testAttr" format="integer" />
    </resources>

    哟西,so清爽~
    * MyTextView实现

    package com.example.test;
    
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.View;
    
    public class MyTextView extends View {
    
        private static final String TAG = MyTextView.class.getSimpleName();
    
        private static final int[] mAttr = { android.R.attr.text, R.attr.testAttr };
        private static final int ATTR_ANDROID_TEXT = 0;
        private static final int ATTR_TESTATTR = 1;
    
        public MyTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
    
            // ==>use typedarray
            TypedArray ta = context.obtainStyledAttributes(attrs, mAttr);
    
            String text = ta.getString(ATTR_ANDROID_TEXT);
            int textAttr = ta.getInteger(ATTR_TESTATTR, -1);
            //输出 text = Hello world! , textAttr = 520
            Log.e(TAG, "text = " + text + " , textAttr = " + textAttr);
    
            ta.recycle();
        }
    
    }
    

    貌似多了些代码,可以看到我们声明了一个int数组,数组中的元素就是我们想要获取的attr的id。并且我们根据元素的在数组中的位置,定义了一些整形的常量代表其下标,然后通过TypedArray进行获取。
    可以看到,我们原本的:

    R.styleable.test => mAttr
    R.styleable.test_text => ATTR_ANDROID_TEXT(0)
    R.styleable.test_testAttr => ATTR_TESTATTR(1)

    那么其实呢?android在其内部也会这么做,按照传统的写法,它会在R.java生成如下代码:

    public static final class attr {
        public static final int testAttr=0x7f0100a9;
        }
    public static final class styleable {
         public static final int test_android_text = 0;
         public static final int test_testAttr = 1;
          public static final int[] test = {
                0x0101014f, 0x7f0100a9
            };
        }

    ok,根据上述你应该发现了什么。styleale的出现系统可以为我们完成很多常量(int[]数组,下标常量)等的编写,简化我们的开发工作(想想如果一堆属性,自己编写常量,你得写成什么样的代码)。那么大家肯定还知道declare-styleable的name属性,一般情况下写的都是我们自定义View的类名。主要为了直观的表达,该declare-styleable的属性,都是改View所用的。

    其实了解该原理是有用的,详见:Android 自定义控件 优雅实现元素间的分割线

    ok,现在5个问题,回答了4个,第一个问题:

    自定义属性的几个步骤是如何奏效的?

    恩,上述以及基本涵盖了这个问题的答案,大家自己总结,所以:略。

    总结下今天的博客。

    • attrs.xml里面的declare-styleable以及item,android会根据其在R.java中生成一些常量方便我们使用(aapt干的),本质上,我们可以不声明declare-styleable仅仅声明所需的属性即可。
    • 我们在View的构造方法中,可以通过AttributeSet去获得自定义属性的值,但是比较麻烦,而TypedArray可以很方便的便于我们去获取。
    • 我们在自定义View的时候,可以使用系统已经定义的属性。

    近期的更新计划:自定义View的一些细节相关的Blog(重点会在交互上),Android最佳实践相关的文章,framework相关的一些文章,敬请期待。

    群号:423372824

    微信公众号:hongyangAndroid
    (欢迎关注,第一时间推送博文信息)

    展开全文
  • 跟着慕课网中鸿洋大神照着写QQ5.0的侧滑菜单中遇到的问题。...但是问题来了,运行程序之后没有自定义属性的效果,于是开始找问题出在了哪里。 首先在Java代码中添加 Log ,通过 Log 对运行中的程序进行追踪,发现系统

    跟着慕课网中鸿洋大神照着写QQ5.0的侧滑菜单中遇到的问题。

    如果按照鸿洋大神所说书写格式是 xmlns:arrtss=”http://schemas.android.com/apk/+当前应用包名但是会报错
    这里写图片描述

    于是我自作聪明,居然不报错了
    这里写图片描述

    但是问题来了,运行程序之后没有自定义属性的效果,于是开始找问题出在了哪里。
    首先在Java代码中添加 Log ,通过 Log 对运行中的程序进行追踪
    这里写图片描述

    发现系统并没有找到我像用的自定义属性
    这里写图片描述

    于是上网搜索知道了怎么改,
    旧版本的书写格式是 xmlns:arrtss=”http://schemas.android.com/apk/+当前应用包名
    2.2版本下 xmlns:arrtss=”http://schemas.android.com/apk/res-auto”
    这里写图片描述

    希望跟我遇到同样问题的童鞋可以少走些弯路

    展开全文
  • Android,如何在代码中获取attr属性的值 1. layout布局文件中使用主题属性 很多时候,我们想引用主题中的属性(attr)。例如 - colorBackGround:activity默认背景 - listChoiceBackgroundIndicator:...
  • android 系统中有几种获取系统属性的方法命令行、c/c++中以及java代码中 1. 命令行(shell)中 获取系统参数 getprop keys 设置系统参数 setprop keys value 2.在c/c++中 方法一: 在c/c++中properties设置...
  • android 自定义属性

    2018-05-31 09:15:37
    今天,简单讲讲android里如何自定义属性。这个其实我本来是想和自定义控件一起讲的,不过最近看一些自定义控件的代码时,老是因为没有完全理解自定义属性,导致看代码花费过多的时间,所以还是决定提前把这个内容讲...
  • * 获取当前系统的版本名称 * @return */ public String getSystemVersionName(){ String ver = null; try { systemProperties_get = Class.forName(&amp;quot;android.os.System...
  • 遇到某些情况需要用到android控件相关的属性,但是这些属性没有提供外部接口,甚至没有无法通过反射获取属性值可以通过一下方法获得: 下面例子是获取textview 中加粗 textStyle 的属性,根据是否加粗,使用下载的...
  • 获取自定义View属性 Android 自定义属性时TypedArray的使用- https://blog.csdn.net/cswhale/article/details/53100792  TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable....
  • 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation)。逐帧动画的工作原理很...
  • 一、前言 对于自定义View相信这是每一个初学者心里的痛,但开发久了,慢慢的你就会发现,其实自定义View并不难,看几篇基础文章,懂得了原理和流程套路,用的多了,实战多了,自然而然就掌握了。...
  • 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/380674751、概述Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。View Animation相当简单,不过只能...
  • 自定义样式属性的使用 自定义样式属性一般是使用在自定义UI控件中,自定义样式属性用来扩展UI控件的样式属性。 使用三步曲如下: 1.声明:自定义样式属性 2.使用:在layout文件使自定义控件时,设置自定义样式...
  • 今天记录一下自定义View的构造函数的使用,以及如何获取自定义属性。先看一下自定义View 的构造函数public class CustomView extends View { private static final String TAG = "CustomView";
  • Android常见XML属性解析

    2016-03-03 19:04:02
    常见XML属性解析 属性 描述 android:id android:id的设置,通常有三种方式,详见下文 android:layout_width 控件宽度 android:layout_height 控件高度 android:padding 内边距 android:margin 外边距 ...
  • CheckBox 有两个跟现实图片资源有关的属性  android:button android:backgroud这两个属性都可用selector赋值 若只需要有 选中 和 未选中 两种显示时,则只需要两张切图即可,但时当需要选中状态下点击,选中...
  • Android 反射应用 反射定义“反射”(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为。为何需要反射反射带来的好处包括: 在运行时检测对象的类型。 动态构造某个类的对象。 检测类的属性和方法。 任意...
  • android.os.SystemProperties类可以用于获取系统的属性值,
1 2 3 4 5 ... 20
收藏数 226,591
精华内容 90,636
关键字:

的属性 获取android