在布局文件中经常看到
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
这是在申明命名空间,View中要想自己生命的属性有意义,则需要为属性加一个命名空间前缀,如"android"或者"app"。
我们可以定义自己的命名空间来使用自定义属性
步骤:
1 申明命名空间:
xmlns:zsg="http://schemas.android.com/apk/res-auto"
这里注意下:
在eclipse中如果要使用你自定义的属性 是不能用res-auto的
必须得替换成你自定义view所属的包(xmlns:myxmlns=""http://schemas.android.com/apk/res/<你的应用程序的包名>"),如果你在恰好使用的自定义属性被做成了lib那就只能使用res-auto了,而在android-studio里,无论你是自己写自定义view还是引用的lib里的自定义的view 都只能使用res-auto这个写法。以前那个包名的写法在android-studio里是被废弃无法使用的。
2 自定义属性
在attrs.xml文件下定义自定义属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TestView">
<!--属性名 属性类型-->
<attr name="text" format="string" />
<attr name="textColor" format="color" />
</declare-styleable>
</resources>
3 在布局文件中使用自定义属性
这里的MyView是一个自定义的view
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:zsg="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.zsg.mytextview.MyView
android:layout_width="match_parent"
android:layout_height="30dp"
zsg:text="这是自定义属性"
zsg:textColor="#ff0000"/>
</RelativeLayout>
4 在MyView中得到自定义属性中的值
public class MyView extends View {
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
//得到TypedArray
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TestView);
String text = (String)a.getText(R.styleable.TestView_text);
int textColor = a.getColor(R.styleable.TestView_textColor, 0xff000000);
Log.d("test", "text:" + text);
Log.d("test", "textColor:" + textColor);
a.recycle();
}
}
输出:
关于TypeArray 和 AttributeSet 的用法 推荐参照
http://blog.csdn.net/lmj623565791/article/details/45022631
- 大小: 1.6 KB
分享到:
相关推荐
这里的`app:`前缀是自定义属性的命名空间,通常与你的应用包名一致。 最后,关于AndroidTest这个压缩包子文件,它可能包含了一个Android测试项目,用于验证上述自定义控件和属性的功能。在Android Studio中,我们...
2. **在布局文件中使用**:在XML布局文件中,使用`app:`前缀(对于AndroidX库)或`@namespace/`(对于Support Library)指定自定义命名空间,并引用自定义属性。 ```xml android:layout_width="wrap_content" ...
这里使用了`app`命名空间(可以自定义),`app:custom*`就是我们的自定义属性,它们会传递给`CustomTextView`并被正确解析。 总结,通过上述三种方法,我们可以轻松地在Android中创建并使用自定义属性。这不仅增强...
本篇文章将深入探讨如何在Android中进行自定义View,并以"自定义属性demo修改版"为例,讲解如何添加和使用自定义属性。 首先,自定义属性是在Android资源文件中定义的,通常在res/values/attrs.xml中。在这个示例中...
为了更好地控制这些属性并使其更易于管理和扩展,Android提供了一种机制——XML自定义属性,使得开发者能够更加灵活地定制自己的组件。 #### 一、定义自定义属性 1. **创建attrs.xml文件** 在`res/values`目录下...
在Android开发中,自定义属性和其引用是提高应用程序可扩展性和灵活性的重要手段。通过创建自定义属性,开发者可以为控件或者布局增加特定的功能,同时保持代码的整洁和模块化。本文将深入探讨Android自定义属性的...
注意,自定义属性需要使用命名空间(namespace)`app:`,前缀可以自定义,但通常使用`app`以避免与Android系统属性冲突。 2. 在自定义View类中获取属性值: ```java public class MyView extends View { private ...
注意,自定义属性前缀通常是`app:`,这是因为Android Studio默认使用`app`作为自定义命名空间的别名。当然,你也可以根据项目需求自定义这个别名。 为了使自定义属性在布局编辑器中可见,我们需要在`...
这里,`app:`前缀表示自定义命名空间,`my_custom_color`是我们定义的自定义属性,`@color/my_button_color`则是它的值。 3. **解析属性值**: 在自定义控件的Java代码中,我们需要解析这些属性值。在自定义View...
这里,我们为`MyLayout`元素引入了命名空间`xmlns:my="http://schemas.android.com/apk/res/com.ghong.mylayout"`,然后可以直接使用自定义属性`my:textColor`和`my:textSize`。在XML中,我们可以为这些属性指定具体...
注意,`app:`是自定义属性的命名空间前缀,可以通过在`AndroidManifest.xml`中定义`xmlns:app`来指定。 最后,我们可以根据获取到的自定义属性值在自定义View的`onDraw()`方法中进行绘制: ```java @Override ...
在Android开发中,自定义属性是提升应用可扩展性和灵活性的重要手段。...无论是从命名空间读取、遍历读取,还是使用系统工具读取,都能帮助我们更好地理解和使用这些自定义属性,从而提升开发效率和用户体验。
这时,我们可以使用`getAttributeIntValue()`方法,传入Android框架的命名空间URL和属性名称: ```java int width = a.getAttributeIntValue( android.R.styleable.View_layout_width, ViewGroup.LayoutParams....
- 自定义属性的命名空间应与你的应用包名一致,防止与系统或其他库的属性冲突。 - 记得在构造函数中回收`TypedArray`,以避免内存泄漏。 - 如果自定义控件继承自 ViewGroup,可能还需要处理子视图的添加和布局...
这里的`app:`前缀是指定自定义命名空间,它必须与你在`attrs.xml`中声明的`name`属性相对应。 至此,我们成功创建了一个自定义View,并为它添加了自定义属性。通过这种方式,开发者可以根据需求定制各种复杂、个性...
这里的`app:`前缀表示我们使用的是自定义命名空间,它与Android系统自带的`android:`命名空间区分开来。 在自定义控件的Java代码中,我们需要通过反射或`TypedArray`来获取这些属性的值。`TypedArray`是Android提供...
别忘了在`<merge>`或`<layout>`标签内引入自定义控件的命名空间,并在`<TestCustomWidget>`标签中指定自定义属性: ```xml <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=...
- 创建自定义控件后,可以在XML布局文件中像其他Android原生控件一样使用,通过`app:`命名空间引用自定义属性。 现在,让我们结合提供的文件"ProgressCircle"来具体分析。这很可能是自定义进度条类的名称,其中...
这里,`app:`是自定义命名空间,对应于我们在AndroidManifest.xml中声明的`android.support.annotation.AttrRes`。 综上所述,自定义View的属性使用是Android开发中的一个重要环节,它允许开发者通过XML来控制...
2. 应用自定义属性值,确保在属性前加上自定义命名空间(如app)。 四、自定义View的优化 1. 重写onDraw()时,合理使用save()和restore()方法保存和恢复Canvas的状态,以减少不必要的绘制操作。 2. 使用硬件加速...