- 浏览: 83830 次
- 性别:
- 来自: 北京
文章分类
最新评论
这里为了演示使用自定义变量,字体大小改用自定义的属性。
首先要创建变量,创建了个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
首先要创建变量,创建了个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 SDK下载速度慢无法更新?使用国内镜像站加速
2016-01-29 18:18 720https://blog.kuoruan.com/24.htm ... -
探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法
2014-08-01 12:02 395原文地址:http://blog.zhourunsheng.c ... -
关于ViewPager和Fragment
2014-07-07 14:18 1006原文地址:http://www.cnblogs.com/iho ... -
Android移动操作系统的脆弱性分类研究
2014-03-18 14:46 616下载地址:http://www.paper.edu.cn/re ... -
Android实战技巧:深入解析AsyncTask
2014-03-06 11:21 343原文地址:http://blog.csdn ... -
Ubuntu android真机调试
2014-03-06 11:01 445关闭adb服务,切换到root,重启adb服务,离开root ... -
64位Ubuntu配置android环境报错(...adb": error=2, 没有那个文件或目录)
2014-02-07 13:29 578原文地址:http://blog.csdn.net/jayho ... -
【Android 声音处理】MediaPlayer和SoundPool
2014-01-14 17:08 1889原文地址:http://blog.sina ... -
Android自定义组件之一:View详解
2013-07-15 16:08 755原文地址:http://www.eoeandroid.com/ ... -
Android中error inflating class fragment
2013-06-19 17:21 1086原文地址:http://blog.csdn.net/qp120 ... -
拿来主义Android优秀开源项目
2013-06-05 11:57 886http://dengzhangtao.iteye.com/b ... -
android sqlite db-journal文件产生原因及说明
2013-06-05 11:37 3553原文地址:http://blog.csdn.net/chthq ... -
Android系统自带Camera方向判别
2013-05-22 16:40 661使用了OrientationEventListener, 也就 ... -
android onTouchEvent和setOnTouchListener中onTouch的区别
2013-03-27 10:35 724原文地址:http://blog.csdn ... -
Android源码编译整理总结
2013-01-08 11:37 677原文地址:http://www.cnblogs.com/hoj ... -
安卓图表引擎AChartEngine(一) - 简介
2012-12-20 17:47 956原文地址:http://blog.csdn.net/lk_bl ... -
微技巧:Android手机隐藏指令大全
2012-12-07 11:36 761原文地址:http://news.xinhuanet.com/ ... -
二进制在数学中的妙用
2012-11-14 15:50 799原文地址:http://blog.csdn.net/hackb ... -
国外程序员推荐:每个程序员都应读的书
2012-11-06 10:58 796原文地址:http://blog.jobbole.com/58 ... -
android 程序开发的插件化 模块化方法 之一
2012-11-02 10:47 914http://www.cnblogs.com/hangxin1 ...
相关推荐
本教程将深入讲解如何在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....
4. 在布局XML文件中使用自定义控件,通过全限定类名引用。 例如,我们有一个自定义控件名为MyCustomView,它可能包含以下代码: ```java public class MyCustomView extends View { public MyCustomView(Context ...
通过在res/values/attrs.xml文件中定义属性,然后在构造函数中使用setAttributes(AttributeSet attrs)方法读取这些属性值。 三、绘图基础 在自定义控件中,通常需要重写onDraw()方法来绘制视图。Canvas对象是绘图的...
5. 使用自定义控件:在XML布局文件中引入`MySelfView`,并设置属性。 ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:myColor="@color/colorPrimary" app:mySize="20...
总结,自定义控件涉及到自定义属性的定义与获取、`onMeasure`方法的正确实现以及`onDraw`方法的优化。理解并掌握这些知识点,能帮助开发者更好地创建满足需求的自定义视图,提升应用的用户体验。在实际项目中,还...
2. 使用属性:定义完属性后,在布局文件中就可以为自定义控件使用这些属性,通过app:前缀引用(如果使用的是AndroidX库,前缀可能是androidx:): ```xml android:layout_width="wrap_content" android:layout_...
现在,我们可以在布局XML文件中使用这个自定义控件,并设置自定义属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_content" app:customTextSize="24sp" app:customTextColor=...
自定义控件的属性定义在`res/values/attrs.xml`文件中。通过在该文件中声明自定义属性,我们可以为控件添加新的配置选项。以下是几种常见的属性类型及其用法: 1. **reference**: 这种类型用于引用已存在的资源ID,...
6. **在XML中使用自定义控件**:最后,在布局文件中,我们可以像使用其他Android内置控件一样使用`TestWidget`,并设置自定义属性: ```xml android:layout_width="wrap_content" android:layout_height="wrap_...
6. 在XML布局文件中声明并使用自定义控件,通过属性指定自定义的样式和行为。 通过学习这个"自定义控件实例源码",开发者可以深入理解Android自定义控件的原理,提高自己的开发技能,同时也可以借鉴其中的优秀实践...
4. 添加属性:为了在XML布局文件中使用自定义控件,需要在res/values/attrs.xml中定义自定义属性。然后在自定义控件中通过`TypedArray`获取这些属性值。 5. 注册到R类:在res目录下新建一个XML文件,例如`custom_...
在博客“自定义控件遇到的俩个小问题”中,作者可能详细分析了这些问题的解决方案,包括如何正确读取自定义属性,以及如何优化自定义控件的绘制过程。通过学习和实践这些技巧,开发者可以更好地掌握自定义控件的开发...
此外,如果自定义控件包含可配置的属性,我们还可以创建一个XML资源文件(如` attrs.xml`)来定义这些属性,并在Java代码中使用`TypedArray`来读取它们。 自定义控件的优化也是一个重要的话题。为了提高性能,我们...
- **解析属性**:在自定义控件的构造函数中,使用`TypedArray`来获取并设置这些属性。 - **暴露接口**:为了在布局文件中方便地设置这些属性,可以提供对应的setter方法。 4. **使用自定义控件**: - **引入XML*...
6. **在布局文件中使用**:最后,将自定义控件添加到项目的`res/layout`目录下的XML布局文件中,通过`<com.example.SaRoundProgressBar>`标签引用,并可以设置之前定义的属性。 saRoundProgressBarDemo的具体实现...
在完成以上基础工作后,为了使自定义控件在XML布局文件中可用,你需要在项目的`res/layout`目录下创建一个`attrs.xml`文件,定义自定义属性。例如,你可以添加一个属性`customColor`来设置控件的颜色,这样在XML中就...