189 8069 5689

在Android项目中使用view实现一个点击事件

这篇文章将为大家详细讲解有关在Android项目中使用view实现一个点击事件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

10多年的兰溪网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整兰溪建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“兰溪网站设计”,“兰溪网站推广”以来,每个客户项目都认真落实执行。

Android 自定义view模板并实现点击事件的回调

先看效果图:

在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实现一个点击事件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


网站名称:在Android项目中使用view实现一个点击事件
网址分享:http://cdxtjz.cn/article/pipjjg.html

其他资讯