`

自定义控件(attrs定义属性的使用)

 
阅读更多
这里为了演示使用自定义变量,字体大小改用自定义的属性。

首先要创建变量,创建了个values/attrs.xml文件,文件名任意,但是要在values目录下:

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <declare-styleable name="button">  
        <attr name="textSize" format="dimension" />  
    </declare-styleable>  
</resources>

根标签要是resources,定义的变量要有个名字,declare-styleable name="button">,这里定义名称为button。在这个名称里,可以有多个自定义属性。定义了个名为textSize的属性,格式是dimension,这个format指定了textSize属性的类型,只能用于定义字体大小。

在布局文件中通过自定义属性赋值:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res/com.easymorse.textbutton"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@drawable/background_color">
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="10dip" />
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="40dip">
        <com.easymorse.textbutton.TextButton
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:layout_weight="1" android:text="电影"
            android:gravity="center_vertical|center_horizontal"
            android:background="@drawable/button" android:focusable="true"
            android:clickable="true" myapp:textSize="20sp" />



这里在根标签中增加了:

xmlns:myapp=http://schemas.android.com/apk/res/com.easymorse.textbutton

声明了myapp这个名字空间,myapp是任意的名称,自己可以随便起名,后面的:

http://schemas.android.com/apk/res/

是固定的。再后面接的是应用的包名。

在下面自定义按钮中的:myapp:textSize,就是使用<attr name="textSize"这个变量了,给变量赋值。

还需要一个过程,就是在程序中获取到这个赋值:

public TextButton(final Context context, AttributeSet attrs) {
    this(context, attrs, 0);
    TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.button);
    this.setTextSize(typedArray.getDimension(R.styleable.button_textSize, 15));
    typedArray.recycle();



其中,TypedArray实例是个属性的容器,context.obtainStyledAttributes()方法返回得到。AttributeSet是节点的属性集合,在本例中是<com.easymorse.textbutton.TextButton节点中的属性集合。

这句话:

typedArray.getDimension(R.styleable.button_textSize,
                15)

将获取自定义textSize的值,如果没有,则使用默认的值,15。

最后别忘记调用:

typedArray.recycle();

作用是:

Give back a previously retrieved StyledAttributes, for later re-use.

这里的自定义属性的format,可以有很多种:

reference
string
color
dimension
boolean
integer
float
fraction
enum
flag
分享到:
评论

相关推荐

    Android自定义控件使用attrs属性Demo

    本教程将深入讲解如何在Android中创建自定义控件并使用`attrs.xml`文件来定义自定义属性,以便在布局文件中更灵活地配置和使用这些控件。 首先,我们了解`attrs.xml`文件的作用。这个文件通常位于`res/values`目录...

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

    在自定义控件的`onCreateView()`或`onInitialized AttributeSet attrs`构造函数中,我们需要使用`TypedArray`来获取并应用这些属性: ```java public CustomTitleView(Context context, AttributeSet attrs) { ...

    自定义控件属性与组合控件

    首先,自定义控件属性主要涉及`attr.xml`文件的创建和使用。在项目的`res/values`目录下,我们需要创建一个或多个`attr.xml`文件,用于定义自定义的属性。例如: ```xml ``` 在这个例子中,我们定义了两...

    自定义控件与属性

    为了实现这一点,可以使用`attrs.xml`文件定义自定义属性,然后在自定义控件的构造函数或者`setAttributes()`方法中解析这些属性。例如,你可以定义颜色、尺寸、文字等属性,然后在Java代码中读取并应用这些值。 4....

    android自定义控件+自定义属性的使用

    4. 在布局XML文件中使用自定义控件,通过全限定类名引用。 例如,我们有一个自定义控件名为MyCustomView,它可能包含以下代码: ```java public class MyCustomView extends View { public MyCustomView(Context ...

    Android自定义控件开发入门与实战.zip

    通过在res/values/attrs.xml文件中定义属性,然后在构造函数中使用setAttributes(AttributeSet attrs)方法读取这些属性值。 三、绘图基础 在自定义控件中,通常需要重写onDraw()方法来绘制视图。Canvas对象是绘图的...

    android自定义控件及其属性设置

    5. 使用自定义控件:在XML布局文件中引入`MySelfView`,并设置属性。 ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:myColor="@color/colorPrimary" app:mySize="20...

    自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)(转)

    总结,自定义控件涉及到自定义属性的定义与获取、`onMeasure`方法的正确实现以及`onDraw`方法的优化。理解并掌握这些知识点,能帮助开发者更好地创建满足需求的自定义视图,提升应用的用户体验。在实际项目中,还...

    自定义控件与自定义属性

    2. 使用属性:定义完属性后,在布局文件中就可以为自定义控件使用这些属性,通过app:前缀引用(如果使用的是AndroidX库,前缀可能是androidx:): ```xml android:layout_width="wrap_content" android:layout_...

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

    现在,我们可以在布局XML文件中使用这个自定义控件,并设置自定义属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:customTextSize="24sp" app:customTextColor=...

    android 自定义控件 自定义属性详细介绍

    自定义控件的属性定义在`res/values/attrs.xml`文件中。通过在该文件中声明自定义属性,我们可以为控件添加新的配置选项。以下是几种常见的属性类型及其用法: 1. **reference**: 这种类型用于引用已存在的资源ID,...

    自定义控件属性的demo

    6. **在XML中使用自定义控件**:最后,在布局文件中,我们可以像使用其他Android内置控件一样使用`TestWidget`,并设置自定义属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_...

    自定义控件实例源码

    6. 在XML布局文件中声明并使用自定义控件,通过属性指定自定义的样式和行为。 通过学习这个"自定义控件实例源码",开发者可以深入理解Android自定义控件的原理,提高自己的开发技能,同时也可以借鉴其中的优秀实践...

    自定义控件Demo

    4. 添加属性:为了在XML布局文件中使用自定义控件,需要在res/values/attrs.xml中定义自定义属性。然后在自定义控件中通过`TypedArray`获取这些属性值。 5. 注册到R类:在res目录下新建一个XML文件,例如`custom_...

    自定义控件遇到的两个小问题

    在博客“自定义控件遇到的俩个小问题”中,作者可能详细分析了这些问题的解决方案,包括如何正确读取自定义属性,以及如何优化自定义控件的绘制过程。通过学习和实践这些技巧,开发者可以更好地掌握自定义控件的开发...

    自定义控件入门集

    此外,如果自定义控件包含可配置的属性,我们还可以创建一个XML资源文件(如` attrs.xml`)来定义这些属性,并在Java代码中使用`TypedArray`来读取它们。 自定义控件的优化也是一个重要的话题。为了提高性能,我们...

    Android自定义控件的demo

    - **解析属性**:在自定义控件的构造函数中,使用`TypedArray`来获取并设置这些属性。 - **暴露接口**:为了在布局文件中方便地设置这些属性,可以提供对应的setter方法。 4. **使用自定义控件**: - **引入XML*...

    Android 编写自定义控件实例

    6. **在布局文件中使用**:最后,将自定义控件添加到项目的`res/layout`目录下的XML布局文件中,通过`&lt;com.example.SaRoundProgressBar&gt;`标签引用,并可以设置之前定义的属性。 saRoundProgressBarDemo的具体实现...

    自定义控件其实很简单1/4

    在完成以上基础工作后,为了使自定义控件在XML布局文件中可用,你需要在项目的`res/layout`目录下创建一个`attrs.xml`文件,定义自定义属性。例如,你可以添加一个属性`customColor`来设置控件的颜色,这样在XML中就...

Global site tag (gtag.js) - Google Analytics