`
VIP庚
  • 浏览: 223338 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android 命名空间和自定义属性

 
阅读更多
  在布局文件中经常看到
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
0
1
分享到:
评论

相关推荐

    android 重写控件添加自定义属性

    这里的`app:`前缀是自定义属性的命名空间,通常与你的应用包名一致。 最后,关于AndroidTest这个压缩包子文件,它可能包含了一个Android测试项目,用于验证上述自定义控件和属性的功能。在Android Studio中,我们...

    android 自定义view及自定义属性

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

    android自定义属性(三种方法dome)

    这里使用了`app`命名空间(可以自定义),`app:custom*`就是我们的自定义属性,它们会传递给`CustomTextView`并被正确解析。 总结,通过上述三种方法,我们可以轻松地在Android中创建并使用自定义属性。这不仅增强...

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

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

    Android如何使用XML自定义属性

    为了更好地控制这些属性并使其更易于管理和扩展,Android提供了一种机制——XML自定义属性,使得开发者能够更加灵活地定制自己的组件。 #### 一、定义自定义属性 1. **创建attrs.xml文件** 在`res/values`目录下...

    Android 自定义属性及其引用

    在Android开发中,自定义属性和其引用是提高应用程序可扩展性和灵活性的重要手段。通过创建自定义属性,开发者可以为控件或者布局增加特定的功能,同时保持代码的整洁和模块化。本文将深入探讨Android自定义属性的...

    Android自定义属性

    注意,自定义属性需要使用命名空间(namespace)`app:`,前缀可以自定义,但通常使用`app`以避免与Android系统属性冲突。 2. 在自定义View类中获取属性值: ```java public class MyView extends View { private ...

    AttrTest android自定义属性

    注意,自定义属性前缀通常是`app:`,这是因为Android Studio默认使用`app`作为自定义命名空间的别名。当然,你也可以根据项目需求自定义这个别名。 为了使自定义属性在布局编辑器中可见,我们需要在`...

    Android自定义Attr属性

    这里,`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中,我们可以为这些属性指定具体...

    自定义View使用自定义属性

    注意,`app:`是自定义属性的命名空间前缀,可以通过在`AndroidManifest.xml`中定义`xmlns:app`来指定。 最后,我们可以根据获取到的自定义属性值在自定义View的`onDraw()`方法中进行绘制: ```java @Override ...

    自定义属性

    在Android开发中,自定义属性是提升应用可扩展性和灵活性的重要手段。...无论是从命名空间读取、遍历读取,还是使用系统工具读取,都能帮助我们更好地理解和使用这些自定义属性,从而提升开发效率和用户体验。

    AttributeSet自定义View属性获取

    这时,我们可以使用`getAttributeIntValue()`方法,传入Android框架的命名空间URL和属性名称: ```java int width = a.getAttributeIntValue( android.R.styleable.View_layout_width, ViewGroup.LayoutParams....

    自定义控件(自定义属性)

    - 自定义属性的命名空间应与你的应用包名一致,防止与系统或其他库的属性冲突。 - 记得在构造函数中回收`TypedArray`,以避免内存泄漏。 - 如果自定义控件继承自 ViewGroup,可能还需要处理子视图的添加和布局...

    android 自定义View并添加属性

    这里的`app:`前缀是指定自定义命名空间,它必须与你在`attrs.xml`中声明的`name`属性相对应。 至此,我们成功创建了一个自定义View,并为它添加了自定义属性。通过这种方式,开发者可以根据需求定制各种复杂、个性...

    自定义控件_深度解析自定义属性

    这里的`app:`前缀表示我们使用的是自定义命名空间,它与Android系统自带的`android:`命名空间区分开来。 在自定义控件的Java代码中,我们需要通过反射或`TypedArray`来获取这些属性的值。`TypedArray`是Android提供...

    Android简单实现自定义控件

    别忘了在`&lt;merge&gt;`或`&lt;layout&gt;`标签内引入自定义控件的命名空间,并在`&lt;TestCustomWidget&gt;`标签中指定自定义属性: ```xml &lt;merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=...

    android自定义圆形进度条

    - 创建自定义控件后,可以在XML布局文件中像其他Android原生控件一样使用,通过`app:`命名空间引用自定义属性。 现在,让我们结合提供的文件"ProgressCircle"来具体分析。这很可能是自定义进度条类的名称,其中...

    androidの自定义viw属性使用

    这里,`app:`是自定义命名空间,对应于我们在AndroidManifest.xml中声明的`android.support.annotation.AttrRes`。 综上所述,自定义View的属性使用是Android开发中的一个重要环节,它允许开发者通过XML来控制...

    android中自定义的view和属性

    2. 应用自定义属性值,确保在属性前加上自定义命名空间(如app)。 四、自定义View的优化 1. 重写onDraw()时,合理使用save()和restore()方法保存和恢复Canvas的状态,以减少不必要的绘制操作。 2. 使用硬件加速...

Global site tag (gtag.js) - Google Analytics