如何在Android中自定义?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>一、拓展谷歌提供的系统控件强>
假如我们要对Textview控件进行拓展,首先我们要定义一个类继承Textview,选择性的重写它的onDraw (), onMeasure (), onTouchEvent()等方法,其中,onDraw()负责对图像的绘制,onMeasure()负责测量位置,onTouchEvent()负责设置触摸的事件。当我们想直接绘制出有背景颜色的Textview时,可以在类中定义画笔,在onDraw()进行绘制。代码如下:
Paint paint1=new 油漆();,//定义画笔 paint1.setColor (Color.YELLOW); paint1.setStyle (Paint.Style.FILL);
然后,通过以下的代码,就可以绘制出一个带矩形框的Textview,但是需要在绘制完成后在调用父类的onDraw(),因为是在系统控件上拓展,所以,还要有其原来的功能。
@Override protected 才能;void  onDraw (Canvas 画布),{ ,,,canvas.drawRect (0, 0, getMeasuredWidth (), getMeasuredHeight (), paint1);//绘制矩形 ,,,canvas.save (); ,,,super.onDraw(画布); ,,,canvas.restore (); 以前,,}>使用帆布对象就可以进行绘图了,对画布的讲解,我将会在下一篇博客讲解。
然后,我们只需要在布局文件中加入自定义的控件即可,在布局文件中,自定义视图的名字就是自定义控件类的包名加上类名,假设定义CustomTextview类继承TextView,例子如下:
& lt; com.example.myapplication.View.CustomTextView ,,,android: layout_width=皐rap_content" ,,,android: layout_height=癿atch_parent"祝辞& lt;/com.example.myapplication.View.Buttonbtn><强>二,将系统提供的控件组合在一起强>
除了拓展原有的控件以外,我们还可以将控件组合成一个新的控件使用。首先,我们先定义一个新的布局文件,并把Imageview和Textview加入,代码如下。
& lt; Imageview android:才能id=癅 + id/iv" android:才能layout_width=?0 dp" android:才能layout_height=?0 dp" android: src=https://www.yisu.com/zixun/才能“@mipmap/ic_launcher "/>然后我们定义一个类继承LinearLayout,在类的构造方法中对控件和布局进行初始化。
public void init (Context 上下文),{ ,,,//指定线性布局的显示方式,垂直 ,,,setOrientation(垂直); ,,,//设置用户期望的布局方式 ,,,LayoutParams mLayoutParams =, new LayoutParams (ViewGroup.LayoutParams.WRAP_CONTENT ViewGroup.LayoutParams.WRAP_CONTENT也); ,,,setLayoutParams (mLayoutParams); ,,,setGravity (Gravity.CENTER); ,,,setPadding (4,, 4, 4, 4); ,,,//设置其布局文件 ,,,View mButtonbtnView =, LayoutInflater.from(上下文).inflate (layout.botton_btn_view,,这个,,真的); ,,,mImageView =, mButtonbtnView.findViewById (id.iv); ,,,mTextView =, mButtonbtnView.findViewById (id.tv); 以前,,}>接下来,它的使用方法就和拓展控件的方法一样了,直接在布局文件中,加入控件即可。
& lt; com.example.myapplication.View.Buttonbtn ,,,android: layout_width=皐rap_content" ,,,android: layout_height=癿atch_parent"祝辞& lt;/com.example.myapplication.View.Buttonbtn><强>三、重写视图来实现全新的控件强>
当系统原生的控件无法满足我们需求时,我们就可以定义一个新的控件来完成需要的功能。创建一个新的控件,需要继承视图类,其难点主要在于绘制控件和实现交互。在继承视图类时,我们还需要重写它的onDraw (), onMeasure (), onTouchEvent()来实现绘制,测量和触摸事件。
onDraw()绘制就是在画布上对象上调用其一系列方法进行绘图,绘制控件的形状。
onMeasure ()
下面,我来讲讲onMeasure()。在绘制观点之前,我们需要告诉系统我们需要画一个多大的视图以及他的位置,这就是onMeasure()进行的了。首先,我们来了解一下测量的三种模式:
完全:精确值模式,在指定视图具体数值的时候会用的到。
AT_MOST:最大值模式,将控件设置为“wrap_content"用到,它会根据子控件或者内容变化而变化。
不明:绘制控件想要多大就可以多大。
如何在Android中自定义的观点