重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章将为大家详细讲解有关在Android项目中使用view实现一个点击事件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
10多年的兰溪网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整兰溪建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“兰溪网站设计”,“兰溪网站推广”以来,每个客户项目都认真落实执行。
Android 自定义view模板并实现点击事件的回调
先看效果图:
步骤如下:
1.在res/values/目录下新建一个atts.xml文件
内容如下:
attr.xml文件完成后,就是写一个TopBar.java文件来进行布局:
public class TopBar extends RelativeLayout{ private Button leftBtn, rightBtn; private TextView tvTitle; private String title; private float titleSize ; private Drawable titleBackground; private String leftBtnTitle; private int leftBtnColor; private float leftBtnSize; private String rightBtnTitle; private int rightBtnColor; private float rightBtnSize; private LayoutParams leftBtnParams ,righBtnParams,titleParams; /** * 为TopBar添加回调点击事件,好处是不需要每次都修改TopBar中的点击事件,只需修改从外面传进来的Listener的点击事件 * @param context * @param attrs */ public interface topbarClickListener{ void leftBtnClick(); void rightBtnClick(); } private topbarClickListener listener; public void setTopbarClickListener(topbarClickListener ls){ this.listener = ls; } public TopBar(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.topbar); title = ta.getString(R.styleable.topbar_title); titleSize = ta.getDimension(R.styleable.topbar_titleSize, 0); titleBackground = ta.getDrawable(R.styleable.topbar_titleBacgroud); leftBtnTitle = ta.getString(R.styleable.topbar_leftBtnTitle); leftBtnColor = ta.getColor(R.styleable.topbar_leftBtnColor, 0); leftBtnSize = ta.getDimension(R.styleable.topbar_leftBtnSize, 0); rightBtnTitle = ta.getString(R.styleable.topbar_rightBtnTitle); rightBtnColor = ta.getColor(R.styleable.topbar_rightBtnColor, 0); rightBtnSize = ta.getDimension(R.styleable.topbar_rightBtnSize, 0); ta.recycle();//资源回收 tvTitle = new TextView(context); leftBtn = new Button(context); rightBtn = new Button(context); tvTitle.setText(title); tvTitle.setTextSize(titleSize); tvTitle.setBackground(titleBackground); leftBtn.setText(leftBtnTitle); leftBtn.setTextColor(leftBtnColor); leftBtn.setTextSize(leftBtnSize); rightBtn.setText(rightBtnTitle); rightBtn.setTextColor(rightBtnColor); rightBtn.setTextSize(rightBtnSize); setBackgroundColor(Color.DKGRAY);//设置整个背景色 /** * 将3个控件进行布局 */ //左边的按钮位于父布局的左边,通过addRule(RelativeLayout.ALIGN_PARENT_LEFT);来实现 leftBtnParams = new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); leftBtnParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); leftBtnParams.setMargins(0, 18, 0, 0); addView(leftBtn, leftBtnParams); righBtnParams = new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); righBtnParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); righBtnParams.setMargins(0, 18, 0, 0); addView(rightBtn, righBtnParams); //中间的TextView位于父布局的中间,addRule(RelativeLayout.CENTER_IN_PARENT); titleParams = new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.MATCH_PARENT); titleParams.addRule(RelativeLayout.CENTER_IN_PARENT); tvTitle.setGravity(Gravity.CENTER); addView(tvTitle, titleParams); leftBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub listener.leftBtnClick(); } }); rightBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub listener.rightBtnClick(); } }); } public void setTvTitle(String value){ tvTitle.setText(value); } }
TopBar是通过继承自RelativeLayout来实现的。
注意:由于我们的目的是自定义模板View,所以我们最好不要在TopBar.java中做如下操作:
leftBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //listener.leftBtnClick();//回调实现 Toast.makeText(context, "LEFT BUTTOM CLICK", Toast.LENGTH_SHORT).show(); } }); rightBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //listener.rightBtnClick();//回调实现 Toast.makeText(context, "RIGHT BUTTOM CLICK", Toast.LENGTH_SHORT).show(); } });
如果这样做对于不同的点击事件都需要修改TopBar.java文件中的点击事件,失去了模板的意义。
主布局文件代码如下:
上面的xmlns:custom=”http://schemas.android.com/apk/res/com.example.viewpagerdemo”是必须要添加的,res/ 后面是包名。作用相当于导入包名
MainActivity.java 文件如下:
public class TopBarActivity extends Activity{ private TopBar mTopBar; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.topbar_layout); mTopBar = (TopBar) findViewById(R.id.topbar); /** * 利用回调实现TopBar的点击事件 */ mTopBar.setTopbarClickListener(new topbarClickListener() { @Override public void rightBtnClick() { // TODO Auto-generated method stub Toast.makeText(TopBarActivity.this, "RIGHT BUTTOM CLICK", Toast.LENGTH_SHORT).show(); } @Override public void leftBtnClick() { // TODO Auto-generated method stub Toast.makeText(TopBarActivity.this, "LEFT BUTTOM CLICK", Toast.LENGTH_SHORT).show(); } }); //更改TopBar中显示的标题 mTopBar.setTvTitle("凤凰网"); } }
关于在Android项目中使用view实现一个点击事件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。