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 format
. name
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的源码实现过程,旨在帮助开发者理解和掌握这一核心技能。 首先,了解自定义View的基本步骤: 1. **定义View类**:创建一个新的Java类,继承自`android.view.View`或其子类,如`...
在Android应用开发中,自定义View视图是一个重要的技术,它允许开发者根据特定需求创建独一无二的用户界面元素。本文将深入探讨如何通过继承View类来实现一个自定义的罗盘界面,以帮助开发者理解自定义视图的工作...
2. **在布局文件中使用**:在XML布局文件中,使用`app:`前缀(对于AndroidX库)或`@namespace/`(对于Support Library)指定自定义命名空间,并引用自定义属性。 ```xml android:layout_width="wrap_content" ...
7. **自定义View与XML布局**:为了让自定义View易于在XML布局中使用,需要提供对应的构造函数和属性。`attr.xml`文件用于定义自定义属性,`LayoutInflater`用于实例化自定义View。 8. **自定义View的最佳实践**:...
本Demo以“通过xml文件自定义View”为主题,旨在演示如何利用XML布局文件来定义一个自定义的View,并在实际项目中进行使用。 首先,自定义View的基本步骤包括创建一个新的Java类,该类继承自Android的基础View类,...
在Android中,我们可以为自定义View定义自己的XML属性,使得在布局文件中更容易配置和使用。这需要以下几个步骤: 1. 在res/values/attrs.xml文件中定义自定义属性,如`progressColor`(进度颜色)、`...
总结来说,Android自定义View的实现涉及多个方面,包括继承基类、重写绘图方法、定义和使用自定义属性、处理触摸事件等。通过这些技巧,开发者可以构建出强大且灵活的组件,为应用带来独特的视觉效果和交互体验。而...
- 开发者可以在Android Studio中导入这个项目,通过查看源码了解实现细节,学习如何结合XML布局文件和Java代码创建自定义View。 - 运行项目后,可以在模拟器或真机上看到水平温度计的动态效果。 8. **注释**: -...
在上面的代码中,我们使用了一个自定义的 Tab 布局文件 `widget_choose_icon_tab_bg.xml`,该文件代码如下: ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=...
此外,可以通过`attrs.xml`文件定义自定义属性,使其可以在XML布局中设置,增加代码的可读性和复用性。 总的来说,自定义View在Android开发中扮演着不可或缺的角色,它允许开发者根据项目需求打造独一无二的用户...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI元素。本示例着重讲解如何实现一个圆形进度条,这个主题来自于xiaanming大神的源码改造,旨在帮助开发者理解并掌握...
4. 在布局XML文件中使用自定义View,通过`<com.example.CustomButton>`这样的方式引用。 对于自定义Button,我们通常会继承自AppCompat库中的AppCompatButton或者直接继承自View。这里的目标是实现点击后背景颜色...
当自定义View被添加到XML布局中并且设置了属性时,这些属性会作为`AttributeSet`对象传递给构造函数。我们可以使用`getAttributeValue()`方法从`AttributeSet`中获取特定的属性值。例如,如果我们有一个自定义属性`...
在XML布局文件中,我们可以像使用原生View一样使用自定义View,并设置其属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:customColor="@color/colorPrimary" ...
在Android开发中,自定义View和Layout是提升应用性能、实现独特交互效果和优化界面设计的重要手段。本文将深入探讨自定义View和Layout的属性,以及如何通过源码理解和使用这些特性。 首先,自定义View的基本步骤...
- 为了在XML布局文件中方便地使用自定义View,我们可以添加属性。通过`attr.xml`定义自定义属性,然后在`R.java`中生成对应的资源ID。在自定义View类中,使用`getAttributes()`方法获取这些属性值。 - 为了支持...
1. **创建自定义布局文件**:在`res/layout`目录下创建一个新的XML布局文件,例如`title_view.xml`,在这个文件中定义头部视图的结构和样式。可以包括ImageView、TextView、Button等组件,并通过设置属性来调整它们...
在自定义View的构造函数或者`on.AttributeSet()`方法中,可以使用`obtainStyledAttributes()`方法来解析XML布局文件中的属性值: ```java public class CustomView extends View { private int customColor; ...
本篇文章将深入探讨如何在Android中进行自定义View,并以"自定义属性demo修改版"为例,讲解如何添加和使用自定义属性。 首先,自定义属性是在Android资源文件中定义的,通常在res/values/attrs.xml中。在这个示例中...
本项目旨在教你如何在Android项目中创建一个自定义View,用于实现高斯模糊和毛玻璃效果,并且允许开发者自定义模糊程度。以下是关于这个主题的详细讲解。 一、高斯模糊原理 高斯模糊是一种图像处理技术,通过对图像...