`
vssupermadman
  • 浏览: 23063 次
社区版块
存档分类
最新评论

Android自定义View以及layout属性全攻略

 
阅读更多

作者: Android开发网原创 时间: 2010-08-10

  对于Android系统的自定义View可能大家都熟悉了,对于自定义View的属性添加,以及Android的Layout的命名空间问题,很多网友还不是很清楚,今天Android123一起再带大家温习一下

  CwjView myView=new CwjView(context);

  如果用于游戏或整个窗体的界面,我们可能直接在onCreate中setContentView(myView); 当然如果是控件,我们可能会需要从Layout的xml中声明,比如

  <cn.com.android123.CwjView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
  />

  当然,我们也可以直接从父类声明比如

  <View class="cn.com.android123.CwjView"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
  />

上面我们仅用了父类View的两个属性,均来自android命名空间,而名称为layout_width或layout_height,我们自定义的控件可能有更多的功能,比如

    <cn.com.android123.CwjView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   cwj:age="22"
   cwj:university="sjtu"
   cwj:city="shanghai"
   />

我们可以看到上面的三个属性,是我们自定义的。作为标准xml规范,可能还包含了类似 xmlns:android="http://schemas.android.com/apk/res/android"  这样的语句,对于定义完整的View,我们的命名空间为cwj,这里可以写为 xmlns:cwj=http://schemas.android.com/apk/res/cn.com.android123.cwjView 或 xmlns:cwj=http://schemas.android.com/apk/res/android 都可以。

  对于定义的cwj命名空间和age、university以及city的三个属性我们如何定义呢? 在工程的res/values目录中我们新建一个cwj_attr.xml文件,编码方式为utf-8是一个好习惯,内容如下

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <declare-styleable name="CwjView">
  <attr name="age" format="integer" />
  <attr name="city" format="string" />
  <attr name="university" format="string" />
  </declare-styleable>
</resources>

  这里我们可能对format不是很熟悉,目前Android系统内置的格式类型有integer比如ProgressBar的进度值,float比如 RatingBar的值可能是3.5颗星,boolean比如ToggleButton的是否勾选,string比如TextView的text属性,当然除了我们常见的基础类型外,Android的属性还有特殊的比如color是用于颜色属性的,可以识别为#FF0000等类型,当然还有 dimension的尺寸类型,比如23dip,15px,18sp的长度单位,还有一种特殊的为reference,一般用于引用@+id/cwj @drawable/xxx这样的类型。

  当然什么时候用reference呢? 我们就以定义一个颜色为例子,

  <attr name="red" format="color|reference" />  这里我们用了逻辑或的运算符,定义的红色是颜色类型的,同时可以被引用

  当然,对于我们自定义的类中,我们需要使用一个名为obtainStyledAttributes的方法来获取我们的定义。在我们自定义View的构造方法(Context context, AttributeSet attrs)的重载类型中可以用

  public CwjView(Context context, AttributeSet attrs) {
  super(context, attrs);
        TypedArray a = context.obtainStyledAttributes(attrs,
          R.styleable.cwj_attr);
        mAge = a.getInteger(R.styleable.CwjView_age, 22);
        mCity = a.getString(R.styleable.CwjView_city, "shanghai");
        mUniversity= a.getString(R.styleable.CwjView_university, "sjtu");
      
        a.recycle(); //Android123提示大家不要忘了回收资源

}

这样类的全局成员变量 mAge、mCity就获取了我们需要的内容,当然根据layout中的数值我们自定义的CwjView需要动态的处理一些数据的情况,可以使用 AttributeSet类的getAttributeResourceValue方法获取。

public CwjView(Context context, AttributeSet attrs)
{
  super(context, attrs);
  resId = attrs.getAttributeResourceValue("cn.com.android123.CwjView", "age", 100); 
  resId = attrs.getAttributeResourceValue("cn.com.android123.CwjView", "city", "shanghai");
  //resID就可以任意使用了
}

以上两种方法中,参数的最后一个数值为默认的,如果您有不明白的地方可以来函到 android123@163.com 我们会在第一时间回复。
分享到:
评论

相关推荐

    25. Android自定义View以及layout属性全攻略.txt

    Android自定义View以及layout属性全攻略.txt

    Android自定义View以及Layout属性

    本文将深入探讨自定义View和Layout的属性,以及如何通过源码理解和使用这些特性。 首先,自定义View的基本步骤包括创建一个新的Java类,继承自View或已有的View子类(如TextView、ImageView等),然后重写必要的...

    android 自定义view及自定义属性

    在Android开发中,自定义View和自定义属性是提升应用个性化和功能扩展性的重要手段。本文将深入探讨这两个核心概念,以及如何在实际项目中应用它们。 ### 自定义View 自定义View允许开发者创建自己的视图组件,以...

    android 自定义view比较综合的例子

    总之,这个“android 自定义view比较综合的例子”涵盖了自定义View的各个方面,包括基本构建、高级绘制、动画实现以及性能优化。对于开发者来说,深入学习和实践这些内容,将有助于提升Android应用的用户体验和创新...

    android 自定义View并添加属性

    本教程将深入探讨如何在Android中自定义View并为其添加属性,以实现更灵活的界面定制。 首先,自定义View通常涉及到继承一个现有的View类,如View、TextView或ImageView等,或者直接继承ViewGroup来创建自定义容器...

    Android 自定义View 之 自定义属性 demo 修改版

    本篇文章将深入探讨如何在Android中进行自定义View,并以"自定义属性demo修改版"为例,讲解如何添加和使用自定义属性。 首先,自定义属性是在Android资源文件中定义的,通常在res/values/attrs.xml中。在这个示例中...

    BookPage-Android自定义View实现翻页效果,并附带实现教程.zip

    仿真书籍翻页效果BookPageView简介:实现了仿真翻页效果,教程完整地描述了翻页原理分析到性能优化的过程教程博客:Android自定义View——从零开始实现书籍翻页效果(一) Android自定义View——从零开始实现书籍...

    Android 自定义View视图

    通过实践这样一个自定义罗盘视图的项目,开发者不仅能学会如何创建自定义View,还能深入理解Android图形绘制、事件处理以及传感器数据的运用,这些都是Android应用开发中的重要技能。通过不断的练习和学习,开发者...

    Android 自定义View实现水平温度计

    总的来说,这个项目涵盖了Android自定义View的基本流程,以及图形绘制、颜色处理、动态更新等核心知识点,是学习Android自定义组件的一个良好实践。通过学习和研究,开发者不仅可以掌握自定义View的开发技巧,还能...

    Android自定义View实现转盘旋转的效果

    Android 自定义 View 实现转盘旋转的效果 Android 的自定义 View 为开发者定义和使用个性化的 View 提供了很好的支持,想要使用自己定义的 View,需要继承 View 类,并重写构造函数和 onDraw() 函数。onDraw 函数...

    Android 自定义view,自定义属性demo

    本示例"Android 自定义view,自定义属性demo"将带你深入理解如何在Android中创建并使用自定义属性,以增强自定义View的功能。 首先,自定义属性是在XML布局文件中定义的,通常位于res/values目录下的attrs.xml文件...

    android 自定义View界面大合集

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,以实现更加丰富和个性化的交互体验。"Android 自定义View界面大合集"的主题涵盖了这个领域的广泛知识点,包括但不限于...

    android 自定义View 两种方式

    无论是哪种方式,记得在自定义View类中处理好触屏事件、测量和绘制逻辑,以及可能的属性设置。此外,可以通过`attrs.xml`文件定义自定义属性,使其可以在XML布局中设置,增加代码的可读性和复用性。 总的来说,...

    AttributeSet自定义View属性获取

    `AttributeSet`是Android系统提供的一种机制,用于在布局XML中为自定义View指定特定的属性,并在运行时解析这些属性,以便自定义View根据这些属性进行初始化。本篇文章将深入探讨如何通过`AttributeSet`来实现自定义...

    Android高手进阶之自定义View,自定义属性(带进度的圆形进度条)源码

    我们首先从标题和描述中提取的主要知识点包括:自定义View、自定义属性以及如何在实际项目中应用这些技术。 一、自定义View 自定义View是Android开发中的高级特性,它允许开发者扩展系统提供的基础组件,以满足更...

    Android自定义view——组合控件

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特的用户界面元素。本主题将深入探讨如何在Android中实现自定义组合控件,即利用多个基础控件构建一个具有特殊功能或样式的复合视图。...

    Android自定义Layout布局

    在Android Studio中,可以创建一个res/layout目录下的XML文件,声明自定义布局类,并在`&lt;layout&gt;`标签中设置属性。 ```xml &lt;com.example.myapp.CustomLayout xmlns:android=...

    给自定义View添加xml属性

    笔者之前已经写过了一些自定义View的文章...笔者之前的文章中仅仅介绍了如何使用自定义View以及为什么要使用自定义View等等,但是在实际操作中,我们还是希望自定义View之后,直接能够在xml中就对其进行操作,如下图:

    android 自定义view 圆形进度条

    总结,自定义Android View涉及绘制逻辑、事件处理、属性定义等多个方面。通过对xiaanming大神源码的学习和改造,我们可以深入理解自定义View的工作原理,并将其应用于实际项目中,创建出独具特色的UI组件。在实际...

    Android自定义View高仿抖音潜艇大挑战小游戏.zip

    Android自定义View高仿抖音潜艇大挑战小游戏.zipAndroid自定义View高仿抖音潜艇大挑战小游戏.zipAndroid自定义View高仿抖音潜艇大挑战小游戏.zipAndroid自定义View高仿抖音潜艇大挑战小游戏.zipAndroid自定义View...

Global site tag (gtag.js) - Google Analytics