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

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

概述Android自定义view模板并实现点击事件的回调主要的目的就是仿老版QQ的一个界面做一个模板。然后实现点击事件的回调。先看效果图:

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

主要的目的就是仿老版QQ的一个界面做一个模板。然后实现点击事件的回调。先看效果图:

步骤如下:

1.在res/values/目录下新建一个atts.xml文件

内容如下:

<resources>  <declare-styleable name="topbar">    <attr name="Title" format="string"/>    <attr name="TitleBacgroud" format="reference|color"/>    <attr name="TitleSize" format="dimension"></attr>    <attr name="leftBtnTitle" format="string"></attr>    <attr name="leftBtncolor" format="color"></attr>    <attr name="leftBtnSize" format="dimension"></attr>    <attr name="rightBtnTitle" format="string"></attr>    <attr name="rightBtncolor" format="color"></attr>    <attr name="rightBtnSize" format="dimension"></attr>  </declare-styleable>

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);    addVIEw(leftBtn,leftBtnParams);    righBtnParams = new LayoutParams(relativeLayout.LayoutParams.WRAP_CONTENT,relativeLayout.LayoutParams.WRAP_CONTENT);    righBtnParams.addRule(relativeLayout.AliGN_PARENT_RIGHT);    righBtnParams.setmargins(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文件中的点击事件,失去了模板的意义。

主布局文件代码如下:

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  xmlns:custom="http://schemas.androID.com/apk/res/com.example.vIEwpagerdemo"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  androID:orIEntation="vertical" >  <com.example.vIEwpagerdemo.vIEw.topbar     androID:ID="@+ID/topbar"    androID:layout_wIDth="match_parent"    androID:layout_height="100dp"    custom:title="网易新闻"    custom:TitleBacgroud="#ff2255"    custom:TitleSize="30sp"    custom:leftBtntitle="BACK"    custom:leftBtncolor="#ff4400"    custom:leftBtnSize="24sp"    custom:rightBtntitle="MORE"    custom:rightBtncolor="#ff4400"    custom:rightBtnSize="24sp"    ></com.example.vIEwpagerdemo.vIEw.topbar></linearLayout>

上面的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,Toast.LENGTH_SHORT).show();      }      @OverrIDe      public voID leftBtnClick() {        // Todo auto-generated method stub        Toast.makeText(topBaractivity.this,Toast.LENGTH_SHORT).show();      }    });    //更改topbar中显示的标题    mtopbar.setTvTitle("凤凰网");  }}

这样可以在MainActivity中通过回调来实现点击事件。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android 自定义view模板并实现点击事件的回调全部内容,希望文章能够帮你解决Android 自定义view模板并实现点击事件的回调所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存