`
ericbaner
  • 浏览: 177508 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android创建自定义的View, 如何写自定义的View属性以在xml布局中使用

 
阅读更多

Android创建自定义的View, 如何写自定义的View属性以在xml布局中使用?

stackoverflow上回答很好,转抄如下:

http://stackoverflow.com/questions/3441396/defining-custom-attrs

 

Currently the best documentation is the source. You can take a look at it here (attrs.xml).

You can define attributes in the top <resources> element or inside of a <declare-styleable>element. If I'm going to use an attr in more than one place I put it in the root element. Note, all attributes share the same global namespace. That means that even if you create a new attribute inside of a<declare-styleable> element it can be used outside of it and you cannot create another attribute with the same name of a different type.

An <attr> element has two xml attributes name and formatname lets you call it something and this is how you end up referring to it in code, e.g., R.attr.my_attribute. The format attribute can have different values depending on the 'type' of attribute you want.

  • reference - if it references another resource id (e.g, "@color/my_color", "@layout/my_layout")
  • color
  • boolean
  • dimension
  • float
  • integer
  • string
  • fraction
  • enum - normally implicitly defined
  • flag - normally implicitly defined

You can set the format to multiple types by using |, e.g., format="reference|color".

enum attributes can be defined as follows:

<attr name="my_enum_attr">
  <enum name="value1" value="1" />
  <enum name="value2" value="2" />
</attr>

flag attributes are similar except the values need to be defined so they can be bit ored together:

<attr name="my_flag_attr">
  <flag name="fuzzy" value="0x01" />
  <flag name="cold" value="0x02" />
</attr>

In addition to attributes there is the <declare-styleable> element. This allows you to define attributes a custom view can use. You do this by specifying an <attr> element, if it was previously defined you do not specify the format. If you wish to reuse an android attr, for example, android:gravity, then you can do that in the name, as follows.

An example of a custom view <declare-styleable>:

<declare-styleable name="MyCustomView">
  <attr name="my_custom_attribute" />
  <attr name="android:gravity" />
</declare-styleable>

When defining your custom attributes in XML on your custom view you need to do a few things. First, declare a namespace to find your attributes. You do this on the top layout element. Normally there is thexmlns:android="http://schemas.android.com/apk/res/android" well you must also doxmlns:whatever="http://schemas.android.com/apk/res/org.example.mypackage". Theorg.example.mypackage is the root package as it is defined in your AndroidManifest.xml.

Example:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:whatever="http://schemas.android.com/apk/res/org.example.mypackage"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

    <org.example.mypackage.MyCustomView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:gravity="center"
      whatever:my_custom_attribute="Hello, world!" />
</LinearLayout>

Finally, to access that custom attribute you normally do so in the constructor of your custom view as follows.

public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);

  TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyle, 0);

  String str = a.getString(R.styleable.MyCustomView_my_custom_attribute);

  //do something with str

  a.recycle();
}

The end. :)

分享到:
评论

相关推荐

    Android 创建自定义View源码

    本教程将深入探讨Android自定义View的源码实现过程,旨在帮助开发者理解和掌握这一核心技能。 首先,了解自定义View的基本步骤: 1. **定义View类**:创建一个新的Java类,继承自`android.view.View`或其子类,如`...

    Android 自定义View视图

    在Android应用开发中,自定义View视图是一个重要的技术,它允许开发者根据特定需求创建独一无二的用户界面元素。本文将深入探讨如何通过继承View类来实现一个自定义的罗盘界面,以帮助开发者理解自定义视图的工作...

    android 自定义view及自定义属性

    2. **在布局文件中使用**:在XML布局文件中,使用`app:`前缀(对于AndroidX库)或`@namespace/`(对于Support Library)指定自定义命名空间,并引用自定义属性。 ```xml android:layout_width="wrap_content" ...

    android 自定义View界面大合集

    7. **自定义View与XML布局**:为了让自定义View易于在XML布局中使用,需要提供对应的构造函数和属性。`attr.xml`文件用于定义自定义属性,`LayoutInflater`用于实例化自定义View。 8. **自定义View的最佳实践**:...

    通过xml文件自定义view的一个Demo

    本Demo以“通过xml文件自定义View”为主题,旨在演示如何利用XML布局文件来定义一个自定义的View,并在实际项目中进行使用。 首先,自定义View的基本步骤包括创建一个新的Java类,该类继承自Android的基础View类,...

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

    在Android中,我们可以为自定义View定义自己的XML属性,使得在布局文件中更容易配置和使用。这需要以下几个步骤: 1. 在res/values/attrs.xml文件中定义自定义属性,如`progressColor`(进度颜色)、`...

    Android自定义view实现代码复用

    总结来说,Android自定义View的实现涉及多个方面,包括继承基类、重写绘图方法、定义和使用自定义属性、处理触摸事件等。通过这些技巧,开发者可以构建出强大且灵活的组件,为应用带来独特的视觉效果和交互体验。而...

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

    - 开发者可以在Android Studio中导入这个项目,通过查看源码了解实现细节,学习如何结合XML布局文件和Java代码创建自定义View。 - 运行项目后,可以在模拟器或真机上看到水平温度计的动态效果。 8. **注释**: -...

    Android Tablayout 自定义Tab布局的使用案例

    在上面的代码中,我们使用了一个自定义的 Tab 布局文件 `widget_choose_icon_tab_bg.xml`,该文件代码如下: ```xml &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android=...

    android 自定义View 两种方式

    此外,可以通过`attrs.xml`文件定义自定义属性,使其可以在XML布局中设置,增加代码的可读性和复用性。 总的来说,自定义View在Android开发中扮演着不可或缺的角色,它允许开发者根据项目需求打造独一无二的用户...

    android 自定义view 圆形进度条

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI元素。本示例着重讲解如何实现一个圆形进度条,这个主题来自于xiaanming大神的源码改造,旨在帮助开发者理解并掌握...

    android自定义view自定义buttonDemo

    4. 在布局XML文件中使用自定义View,通过`&lt;com.example.CustomButton&gt;`这样的方式引用。 对于自定义Button,我们通常会继承自AppCompat库中的AppCompatButton或者直接继承自View。这里的目标是实现点击后背景颜色...

    AttributeSet自定义View属性获取

    当自定义View被添加到XML布局中并且设置了属性时,这些属性会作为`AttributeSet`对象传递给构造函数。我们可以使用`getAttributeValue()`方法从`AttributeSet`中获取特定的属性值。例如,如果我们有一个自定义属性`...

    android 自定义View并添加属性

    在XML布局文件中,我们可以像使用原生View一样使用自定义View,并设置其属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:customColor="@color/colorPrimary" ...

    Android自定义View以及Layout属性

    在Android开发中,自定义View和Layout是提升应用性能、实现独特交互效果和优化界面设计的重要手段。本文将深入探讨自定义View和Layout的属性,以及如何通过源码理解和使用这些特性。 首先,自定义View的基本步骤...

    Android中自定义控件View

    - 为了在XML布局文件中方便地使用自定义View,我们可以添加属性。通过`attr.xml`定义自定义属性,然后在`R.java`中生成对应的资源ID。在自定义View类中,使用`getAttributes()`方法获取这些属性值。 - 为了支持...

    Android自定义头部view

    1. **创建自定义布局文件**:在`res/layout`目录下创建一个新的XML布局文件,例如`title_view.xml`,在这个文件中定义头部视图的结构和样式。可以包括ImageView、TextView、Button等组件,并通过设置属性来调整它们...

    自定义View使用自定义属性

    在自定义View的构造函数或者`on.AttributeSet()`方法中,可以使用`obtainStyledAttributes()`方法来解析XML布局文件中的属性值: ```java public class CustomView extends View { private int customColor; ...

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

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

    android项目下对图片高斯模糊毛玻璃自定义view

    本项目旨在教你如何在Android项目中创建一个自定义View,用于实现高斯模糊和毛玻璃效果,并且允许开发者自定义模糊程度。以下是关于这个主题的详细讲解。 一、高斯模糊原理 高斯模糊是一种图像处理技术,通过对图像...

Global site tag (gtag.js) - Google Analytics