Android自定义控件 于笔者-开天辟地的大事(一)
2014-05-27 11:53
155 查看
笔者接触Android也有2年有余,在两年中,一直逃避自定义控件,认为自定义控件太难了,今天不知怎么回事,告诉自己,一定要迎难而上,这样才能所向披靡。下面是我对自定义控件的见解
今天,笔者先对自定义控件中,自定义属性进行部分讲解:
众所周知,在Android中,屏幕适配的优势在于它强大的XML。但是XML中有一个神奇的功能,当你按下ALT+/的时候,eclipse会给你提示,想设置什么控件的属性,很容易,当你的XML写完后,你的View已经布局完成,呈献给用户了。下面,我们就用自定义的一个View来刨析一下这个神奇的功能。
首先,我们在value下面的resource下面,定义一下代码
这里面定义的blankImg, blankTxt 是自定义的属性,在我们自定义的View中会用到,暂时先不详解
ps:此处备注一下format可能的取值 :
1,reference:参考某一资源ID。
2,color:颜色值。
3,boolean:布尔值。
4,dimension:尺寸值。
5,float:浮点值。
6,integer:整型值。
7,string:字符串。
8,fraction:百分数。
9,enum:枚举值。
a,
属性定义
属性使用:这么简单地东西,不在写使用方法
10,flag:位或运算。
a,
属性定义
下面,我们在XML中用到控件BlankView他是继承于View
这是我们的命名空间dajia:
各位,这样完成之后,不要庆幸太早,这样我们的View和这些自定义的View一点关系都没有。我始终认为有一句至理名言:
凡事有因有果,知其因,必求其果。
现在我们,把View和我们自定义的属性结合起来:
QQ:120595960
今天,笔者先对自定义控件中,自定义属性进行部分讲解:
众所周知,在Android中,屏幕适配的优势在于它强大的XML。但是XML中有一个神奇的功能,当你按下ALT+/的时候,eclipse会给你提示,想设置什么控件的属性,很容易,当你的XML写完后,你的View已经布局完成,呈献给用户了。下面,我们就用自定义的一个View来刨析一下这个神奇的功能。
首先,我们在value下面的resource下面,定义一下代码
<declare-styleable name="blankView"> <attr name="blankImg" format="reference" /> <attr name="blankTxt" format="reference" /> </declare-styleable>
这里面定义的blankImg, blankTxt 是自定义的属性,在我们自定义的View中会用到,暂时先不详解
ps:此处备注一下format可能的取值 :
1,reference:参考某一资源ID。
2,color:颜色值。
3,boolean:布尔值。
4,dimension:尺寸值。
5,float:浮点值。
6,integer:整型值。
7,string:字符串。
8,fraction:百分数。
9,enum:枚举值。
a,
属性定义
<span style="white-space:pre"> </span><declare-styleable name="名称"> <span style="white-space:pre"> </span><attr name="orientation"> <span style="white-space:pre"> </span><enum name="horizontal" value="0" /> <span style="white-space:pre"> </span><enum name="vertical" value="1" /> <span style="white-space:pre"> </span></attr> <span style="white-space:pre"> </span></declare-styleable>b,
属性使用:这么简单地东西,不在写使用方法
10,flag:位或运算。
a,
属性定义
<span style="white-space:pre"> </span><declare-styleable name="名称"> <span style="white-space:pre"> </span><attr name="windowSoftInputMode"> <span style="white-space:pre"> </span><flag name="stateUnspecified" value="0" /> <span style="white-space:pre"> </span><flag name="stateUnchanged" value="1" /> <span style="white-space:pre"> </span><flag name="stateHidden" value="2" /> <span style="white-space:pre"> </span><flag name="stateAlwaysHidden" value="3" /> <span style="white-space:pre"> </span><flag name="stateVisible" value="4" /> <span style="white-space:pre"> </span><flag name="stateAlwaysVisible" value="5" /> <span style="white-space:pre"> </span><flag name="adjustUnspecified" value="0x00" /> <span style="white-space:pre"> </span><flag name="adjustResize" value="0x10" /> <span style="white-space:pre"> </span><flag name="adjustPan" value="0x20" /> <span style="white-space:pre"> </span><flag name="adjustNothing" value="0x30" /> <span style="white-space:pre"> </span></attr> <span style="white-space:pre"> </span></declare-styleable>b,使用方法,自己去搞吧。天高任鸟飞,海阔凭鱼跃
下面,我们在XML中用到控件BlankView他是继承于View
这是我们的命名空间dajia:
xmlns:dajia="http://schemas.android.com/apk/res/com.dajia.view"
<com.dajia.view.view.BlankView android:id="@+id/blankView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" dajia:blankImg="@drawable/icon_have_deleted" dajia:blankTxt="@string/file_have_deleted" android:visibility="gone" />
各位,这样完成之后,不要庆幸太早,这样我们的View和这些自定义的View一点关系都没有。我始终认为有一句至理名言:
凡事有因有果,知其因,必求其果。
现在我们,把View和我们自定义的属性结合起来:
package com.dajia.view.view; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.dajia.view.R; public class BlankView extends RelativeLayout { private ImageView mBlankIV; private TextView mBlankTV; public BlankView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); inflate(getContext(), R.layout.view_blank, this); mBlankIV = (ImageView) findViewById(R.id.blankIV); mBlankTV = (TextView) findViewById(R.id.blankTV); if (attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.blankView);//这里面是我们在View的XML中设置的属性,跟我们自定义的属性对应 if (a.hasValue(R.styleable.blankView_blankImg)) { Drawable d = a.getDrawable(R.styleable.blankView_blankImg);//取出blankView_blankImg设置给我们View的ImageView if (d != null) { mBlankIV.setImageDrawable(d); } } if (a.hasValue(R.styleable.blankView_blankTxt)) { mBlankTV.setText(a.getText(R.styleable.blankView_blankTxt));<span style="font-family: Arial, Helvetica, sans-serif;">//取出blankView_blankTxt设置给我们View的TextView</span> } a.recycle(); } } public BlankView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public BlankView(Context context) { this(context, null, 0); } public void setBlankImage(int resId) { mBlankIV.setImageResource(resId); } public void setBlankText(int resId) { mBlankTV.setText(resId); } }到这里,我们的第一篇已经讲完了,不知道各位理解的怎么样,有问题QQ我。
QQ:120595960
相关文章推荐
- android自定义控件:可旋转View:可作为ImageView、ImageButton
- 【转载】08年开源10件大事 谷歌推Chrome和Android
- Android 自定义控件的 拖拽、移动 实现 方法
- Android declare-styleable:自定义控件的属性(attr.xml,TypedArray)的使用
- [转]Android.自定义控件的实现
- android中使用自定义控件是报android.view.InflateException: Binary XML 异常
- Android中自定义控件
- Android自定义控件,实现iphone的picker效果
- android的自定义控件
- Android 实现自定义控件效果1
- Android 自定义控件-SnakeLayout (仿gallery)
- android自定义控件后如何调整自身子控件与父类中子控件的布局
- Android declare-styleable:自定义控件的属性(attr.xml,TypedArray)的使用
- Android 自定义控件 eBook 翻书效果
- Android 实现自定义控件效果2
- Android.自定义控件的实现_RadioButton 和RadioGroup
- android自定义控件中自定义属性的处理方式
- Android 自定义控件-SnakeLayout (仿gallery)
- android 自定义控件
- Android应用之个人应用软件开发(4)【深度UI设计自定义控件】