Android使用AttributeSet自定义控件的方法

Android 中自定义属性(attr.xml,TypedArray)的使用! 

http://blog.csdn.net/Android_Tutor/article/details/5508615 

http://www.cnblogs.com/zwl12549/archive/2011/04/13/2015366.html 
http://blog.csdn.net/Android_Tutor/article/details/5508615 

android中自定义组件 
http://blog.csdn.net/lganggang131/article/details/6653866 
构建自定义组件 
http://blog.csdn.net/shiqx429/article/details/3865581 
Android 自定义复合组件Demo 
http://www.cnblogs.com/TerryBlog/archive/2010/08/03/1791568.html 

http://www.d-android.com/developer/forum.php?mod=viewthread&tid=30307 
所谓自定义控件(或称组件)也就是编写自己的控件类型,而非Android中提供的标准的控件,如TextView,CheckBox等等.不过自定义的控件一般也都是从标准控件继承来的,或者是多种控件组合,或者是对标准控件的属性进行改变而得到的自己满意的控件. 
    自定义控件可能会有很多种方法,这里只介绍我要介绍的方法. 


    在这种方法中,大概的步骤是这样的 
引用
    1.我们的自定义控件和其他的控件一样,应该写成一个类,而这个类的属性是是有自己来决定的. 
    2.我们要在res/values目录下建立一个attrs.xml的文件,并在此文件中增加对控件的属性的定义. 
    3.使用AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来. 
    4.在自定义控件类中使用这些已经连接的属性变量. 
    5.将自定义的控件类定义到布局用的xml文件中去. 
    6.在界面中生成此自定义控件类对象,并加以使用.


==================================================================== 
在View类中的有一段描述: 
引用
Implementing a Custom View 

To implement a custom view, you will usually begin by providing overrides for some of the standard methods that the framework calls on all views. You do not need to override all of these methods. In fact, you can start by just overriding onDraw(android.graphics.Canvas).



关于onFinishInflate方法的理解 

onFinishInflate 当View中所有的子控件均被映射成xml后触发 
http://www.d-android.com/developer/forum.php?mod=viewthread&tid=30307 

这种解释好像不太正确...看API,onFinishInflate 方法是在创建custom View时的Creation部分被执行的...所以应该是 "当View中所有的子空间从xml引用后触发",这是我的理解. 



且在自定义组件的各个方法内放置Log的方法,观察其执行的顺序也的确如API中描述一致. 
 



以下的链接讲解相对详细了 
http://www.apkbus.com/android-3275-1-1.html 


自定义View的常用方法: 

onFinishInflate() 当View中所有的子控件均被映射成xml后触发 

onMeasure(int, int) 确定所有子元素的大小 

onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发 

onSizeChanged(int, int, int, int) 当view的大小发生变化时触发 

onDraw(Canvas) view渲染内容的细节 

onKeyDown(int, KeyEvent) 有按键按下后触发 

onKeyUp(int, KeyEvent) 有按键按下后弹起时触发 

onTrackballEvent(MotionEvent) 轨迹球事件 

onTouchEvent(MotionEvent) 触屏事件 

onFocusChanged(boolean, int, Rect) 当View获取或失去焦点时触发 

onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发 

onAttachedToWindow() 当view被附着到一个窗口时触发 

onDetachedFromWindow() 当view离开附着的窗口时触发,Android123提示该方法和  onAttachedToWindow() 是相反的。 

onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计自定义控件需要以下步骤: 1.创建一个新的 Android Studio 项目。 2.在项目中创建自定义控件的类。该类应继承自 View 或其子类(例如 Button、EditText 等)。 3.在自定义控件类中实现构造函数和必要的方法,例如 onMeasure()、onLayout() 和 onDraw() 等。 4.在布局文件中使用自定义控件。 下面是一个示例代码: ``` public class MyCustomView extends View { private Paint paint; private Rect rect; public MyCustomView(Context context) { super(context); init(); } public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyCustomView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { paint = new Paint(); paint.setColor(Color.BLUE); rect = new Rect(0, 0, 100, 100); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int desiredWidth = 200; int desiredHeight = 200; int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int width; int height; if (widthMode == MeasureSpec.EXACTLY) { width = widthSize; } else if (widthMode == MeasureSpec.AT_MOST) { width = Math.min(desiredWidth, widthSize); } else { width = desiredWidth; } if (heightMode == MeasureSpec.EXACTLY) { height = heightSize; } else if (heightMode == MeasureSpec.AT_MOST) { height = Math.min(desiredHeight, heightSize); } else { height = desiredHeight; } setMeasuredDimension(width, height); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(rect, paint); } } ``` 在布局文件中使用自定义控件: ``` <com.example.myapplication.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content"/> ``` 以上代码是一个简单的自定义 View,它绘制一个蓝色的矩形。当然,你可以根据需要修改自定义控件的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值