自定义android用户控件,使用回调函数实现自定义事件
2016-07-19 15:05
716 查看
直接上代码:
下面是源代码:代码中添加了一个接口,这个接口用于给自定义控件设置自定义的事件
mycontrol.java代码:
[java] view
plaincopy
package paj.control;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
//继承LinearLayout
public class mycontrol extends LinearLayout {
/**
* 一定一个接口
*/
public interface ICoallBack{
public void onClickButton(String s);
}
/**
* 初始化接口变量
*/
ICoallBack icallBack = null;
/**
* 自定义控件的自定义事件
* @param iBack 接口类型
*/
public void setonClick(ICoallBack iBack)
{
icallBack = iBack;
}
//////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
private Context _Context;
/**
* 两个参数的构造函数(必须使用两个参数的构造函数,因为自定义的控件需要在XML布局中使用,里面含有属性)
* @param context 调用自定义控件的对象
* @param attrs
*/
public mycontrol(Context context, AttributeSet attrs) {
super(context, attrs);
_Context = context;
//将自定义的控件添加到主布局
this.addView(CreateLayout());
}
private View CreateLayout(){
//创建一个LainearLayout布局
LinearLayout layout = new LinearLayout(_Context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT , LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(params);
//创建一个文本编辑框
final EditText edit = new EditText(_Context);
LayoutParams editParams = new LayoutParams(LayoutParams.FILL_PARENT , LayoutParams.WRAP_CONTENT);
edit.setLayoutParams(editParams);
//创建一个按钮
Button button = new Button(_Context);
LayoutParams btpParams = new LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT);
button.setLayoutParams(btpParams);
button.setText("点击获取");
//设置按钮的点击事件
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 返回这个自定义控件中计算出的值,使用回调实现
icallBack.onClickButton(edit.getText().toString());
}
});
//文本编辑框和按钮添加到layout布局
layout.addView(edit);
layout.addView(button);
return layout;
}
}
public class MainActivity extends Activity {
mycontrol _mMycontrol;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.test);
//得到自定义控件
_mMycontrol = (mycontrol)findViewById(R.id.mycontrol);
//实现自定义控件中的setonClick自定义事件
_mMycontrol.setonClick(new ICoallBack() {
@Override
public void onClickButton(String s) {
textView.setText(s);//将自定义控件传递的值显示到文本框内
}
});
}
}
下面是源代码:代码中添加了一个接口,这个接口用于给自定义控件设置自定义的事件
mycontrol.java代码:
[java] view
plaincopy
package paj.control;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
//继承LinearLayout
public class mycontrol extends LinearLayout {
/**
* 一定一个接口
*/
public interface ICoallBack{
public void onClickButton(String s);
}
/**
* 初始化接口变量
*/
ICoallBack icallBack = null;
/**
* 自定义控件的自定义事件
* @param iBack 接口类型
*/
public void setonClick(ICoallBack iBack)
{
icallBack = iBack;
}
//////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
private Context _Context;
/**
* 两个参数的构造函数(必须使用两个参数的构造函数,因为自定义的控件需要在XML布局中使用,里面含有属性)
* @param context 调用自定义控件的对象
* @param attrs
*/
public mycontrol(Context context, AttributeSet attrs) {
super(context, attrs);
_Context = context;
//将自定义的控件添加到主布局
this.addView(CreateLayout());
}
private View CreateLayout(){
//创建一个LainearLayout布局
LinearLayout layout = new LinearLayout(_Context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT , LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(params);
//创建一个文本编辑框
final EditText edit = new EditText(_Context);
LayoutParams editParams = new LayoutParams(LayoutParams.FILL_PARENT , LayoutParams.WRAP_CONTENT);
edit.setLayoutParams(editParams);
//创建一个按钮
Button button = new Button(_Context);
LayoutParams btpParams = new LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT);
button.setLayoutParams(btpParams);
button.setText("点击获取");
//设置按钮的点击事件
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 返回这个自定义控件中计算出的值,使用回调实现
icallBack.onClickButton(edit.getText().toString());
}
});
//文本编辑框和按钮添加到layout布局
layout.addView(edit);
layout.addView(button);
return layout;
}
}
public class MainActivity extends Activity {
mycontrol _mMycontrol;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.test);
//得到自定义控件
_mMycontrol = (mycontrol)findViewById(R.id.mycontrol);
//实现自定义控件中的setonClick自定义事件
_mMycontrol.setonClick(new ICoallBack() {
@Override
public void onClickButton(String s) {
textView.setText(s);//将自定义控件传递的值显示到文本框内
}
});
}
}
相关文章推荐
- Android 上的数据格式 FlatBuffers
- Android Volley框架的简单get和post demo
- 获取Android应用专属缓存存储目录
- Android 进程常驻(0)----MarsDaemon使用说明
- EditText详细介绍
- Android:如何从堆栈中还原ProGuard混淆后的代码
- Android自定义控件:进度条的四种实现方式
- Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸
- 本地资源的图片文件 转换成bitmap
- Android开发经典书籍
- 安卓分享纯图片
- Android中Recyclerview使用6----添加条目得到点击事件和长按事件(另一种写法,较简单)
- Android ListView 隐藏自带分割线
- android--xUtils开发框架
- Android逆向分析案例——某地图的定位请求分析
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例
- GreenDao_2.介绍GreenDao
- 推荐几款实用的Android Studio 插件
- android simpledraweeview 获取已经加载的图片bitmap
- Android listview 点击问题