1.收获
说实话,在上一次上课中,对于自定义控件和自定义属性这一块不是很理解,尽管上次结束之后自己又去看了一下,但是还是没有理解,并且我知道这一块是很重要的,但是就在最近的一次课中,我们又重新讲了这个板块,这对于我来说是一个非常好的机会,对于这块的理解。虽然这天不是很正式的上课,没有讲什么新的知识,但是对于我来说算是一个非常好的一天吧。首先时由学姐们来给我们讲解关于考研和保研的问题,对于此时的我来说 无疑是一个非常好的了解和怎样去准备的机会。也许以前的自己真的不知道前方到底该朝哪个方向走在我明白了,有的事情是可以去搏一搏的,如果没有成功,自己也不会后悔。
2.技术
(1)自定义控件
(2)自定义属性
(3)接口
3.技术的实践和应用
在自定义控件和属性这一块我们有两种方式去创建:xml配置 代码创建
(1)自定义控件
1.首先创建一个 类
2.然后在这个类中新建自己的一个类,使得这个类继承于一个自己需要的布局方式,并且还要实现构造方法
public class xcfNavigation extends RelativeLayout {
//使用JAVA代码创建控件
public xcfNavigation(Context context) {
/*super(context);
*/
this(context,null);
}
//使用xml创建控件
public xcfNavigation(Context context, AttributeSet attrs) {
super(context, attrs);
}
3.接下来我们需要个这个类的控件进行初始化
//初始化控件
private void init(Context context,AttributeSet attributeSet){
//设置背景
setBackgroundColor(Color.GRAY);
//判断是不是xml创建的
if(attributeSet!=null){
//从attrs里面提取 xml里面配置的所属属性
TypedArray typedArray=context.obtainStyledAttributes(attributeSet,R.styleable.xcfNavigation);
//提取自己需要的属性
int color=typedArray.getColor(R.styleable.xcfNavigation_xcf_background,Color.MAGENTA);
//使用数据
setXcf_background(color);
}
}
然后在这个类中调用这个初始化的方法
4.代码创建控件
我们需要一个set get方法对外部传来的属性进行设置
public int getXcf_background() {
return xcf_background;
}
public void setXcf_background(int xcf_background) {
this.xcf_background = xcf_background;
//将外部传过来的颜色 设置为背景颜色
setBackgroundColor(xcf_background);
}
我们在代码里面创建一个控件,然后对这个控件进行属性的设置
private void test(){
//代码方式创建控件
xcfNavigation bar=new xcfNavigation(this);
//设置背景颜色
bar.setXcf_background(Color.GRAY);
//把当前控件作为activity的主视图
setContentView(bar);
}
最后我们在那个创建界面的类里面调用这个函数
(2)自定义属性
自定义属性一般是在利用xml配置的时候用的
1.首先我们要新建一个自定义的xml文件
2.在这个xml里面进行添加属性
3.我们在xml里面调用这些属性
<!--用xml创建控件-->
<swu.xcf.a11navigationbbar.xcfNavigation
android:layout_width="match_parent"
android:layout_height="55dp"
app:xcf_background="#F32323"
/>
但是我们发现调用之后并没发生什么改变,虽然我们将这些属性设置出来了但是我们还没有给他添加上去。于是我们还需要将这些属性提取出来再添加上去。
4.然后我们在创建结免得类里面进行配置就可以了。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//test();
}
这就是利用xml配置的属性
5.同样的,如果我们需要创建其他的控件属性的话,方法和步骤和上面的是一样的
(3)接口
接口在以前讲过但是还是不知道怎末去用它,就知道它有事件回调的功能,通过今天的讲解又让我明白了,怎末去使用接口。
1.首先我们要定义一个接口
//定义接口 监听返回按钮被点击了
public interface OnButtonClickedListener{
void backButtonClick();
}
2.然后我们需要知道监听者是谁
记录外部传来的监听者(监听者一定是接口类型的)
//记录监听按钮的对象
OnButtonClickedListener listener;
我们需要一个set方法给外部进行一个设置监听者的机会
public void setListener(OnButtonClickedListener listener) {
this.listener = listener;
}
3.我们给这个监听者监听的对象添加事件
//给按钮添加点击事件
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(listener!=null){
listener.backButtonClick();//调用方法
}
}
});
4.我们在外面给对象进行设置监听者
//设置监听者
bar.setListener(this);
但是我们需要实现这个接口和接口中的方法
@Override
public void backButtonClick() {
Toast.makeText(this,"被点击了",Toast.LENGTH_LONG).show();
}