Android自定义控件之电话拨打小键盘

Android自定义控件之电话拨打小键盘,第1张

概述关于Android的自定义控件,之前也写了两个,一个是简单地继承View,另一个通过继承Layout实现一个省市联动控件。这篇,将通过继承ViewGroup来实现一个电话拨打小键盘。本人一贯风格,懒得罗里吧嗦讲一大堆,直接上图

关于AndroID的自定义控件,之前也写了两个,一个是简单地继承VIEw,另一个通过继承Layout实现一个省市联动控件。这篇,将通过继承VIEwGroup来实现一个电话拨打小键盘。本人一贯风格,懒得罗里吧嗦讲一大堆,直接上图上代码,一切尽在注释中!

1、MyPhoneCard.java

/**  *  * 自定义一个4*3的拨打电话的布局控件,*  *  */ public class MyPhoneCard extends VIEwGroup{      private static final int ColUMNS = 3;   private static final int ROWS = 4;   private static final int NUM_button = ColUMNS*ROWS;      private VIEw[] mbuttons = new VIEw[NUM_button];      private int mbuttonWIDth;   private int mbuttonHeight;   private int mpaddingleft;   private int mpaddingRight;   private int mpaddingtop;   private int mpaddingBottom;   private int mWIDthInc;   private int mHeightInc;   private int mWIDth;   private int mHeight;    public MyPhoneCard(Context context) {     super(context);   }      public MyPhoneCard(Context context,AttributeSet attrs){     super(context,attrs);   }      public MyPhoneCard(Context context,AttributeSet attrs,int defStyle){     super(context,attrs,defStyle);   }      /**    * 当从xml将所有的控件都调入内存后,触发的动作    * 在这里获取控件的大小,并计算整个VIEwGroup需要的总的宽和高    */   @OverrIDe   protected voID onFinishInflate(){     super.onFinishInflate();     final VIEw[] btns = mbuttons;          for(int i=0; i<NUM_button; i++){       btns[i] = this.getChildAt(i);       btns[i].measure(MeasureSpec.UnspecIFIED,MeasureSpec.UnspecIFIED);     }          //缓存大小     final VIEw child = btns[0];     mbuttonWIDth = child.getMeasureDWIDth();     mbuttonHeight = child.getMeasuredHeight();     mpaddingleft = this.getpaddingleft();     mpaddingRight = this.getpaddingRight();     mpaddingtop = this.getpaddingtop();     mpaddingBottom = this.getpaddingBottom();     mWIDthInc = mbuttonWIDth + mpaddingleft + mpaddingRight;     mHeightInc = mbuttonHeight + mpaddingtop + mpaddingBottom;          mWIDth = mWIDthInc*ColUMNS;     mHeight = mHeightInc*ROWS;          Log.v("Finish Inflate:","btnWIDth="+mbuttonWIDth+",btnHeight="+mbuttonHeight+",padding:"+mpaddingleft+","+mpaddingtop+","+mpaddingRight+","+mpaddingBottom);              }      /**    * 这个方法在onFinishInflate之后,onLayout之前调用。这个方面调用两次    */   @OverrIDe   protected voID onMeasure(int wIDthMeasureSpec,int heightmeasureSpec){     super.onMeasure(wIDthMeasureSpec,heightmeasureSpec);     Log.v("VIEwGroup SIZE:wIDth=",mWIDth+"");     Log.v("VIEwGroup SIZE: height=",mHeight+"");     final int wIDth = resolveSize(mWIDth,wIDthMeasureSpec);//传入我们希望得到的宽度,得到测量后的宽度     final int height = resolveSize(mHeight,heightmeasureSpec);//传入我们希望得到的高度,得到测量后的高度     Log.v("VIEwGroup Measured SIZE: wIDth=",wIDth+"");     Log.v("VIEwGroup Measured SIZE: height=",height+"");     //重新计算后的结果,需要设置。下面这个方法必须调用     setMeasuredDimension(wIDth,height);   }    /**    * 这个方法在onMeasure之后执行,这个自定义控件中含有12个子控件(每个小键),所以,重写这个方法,    * 调用每个键的layout,将他们一个一个布局好    * 就是4*3的放置,很简单,一个嵌套循环搞定    */   @OverrIDe   protected voID onLayout(boolean changed,int left,int top,int right,int bottom) {     final VIEw[] buttons = mbuttons;     int i = 0;     Log.v("BottOM:",bottom+"");     Log.v("top",top+"");          int y = (bottom - top) - mHeight + mpaddingtop;//这里其实bottom-top=mHeight,所以y=mpaddingtop     Log.v("Y=",y+"");     for(int row=0; row<ROWS; row++){       int x = mpaddingleft;       for(int col = 0; col < ColUMNS; coL++){         buttons[i].layout(x,y,x+mbuttonWIDth,y+mbuttonHeight);         x = x + mWIDthInc;         i++;       }       y = y + mHeightInc;     }   }  } 

2、布局文件:

<?xml version="1.0" enCoding="utf-8"?> <demo.phone.card.MyPhoneCard  xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:ID = "@+ID/dialpad"   androID:paddingleft="7dp"   androID:paddingRight="7dp"   androID:paddingtop="6dp"   androID:paddingBottom="6dp"   androID:layout_gravity="center"   androID:layout_wIDth="wrap_content"  androID:layout_height="wrap_content"   androID:layout_marginBottom="5dp">     <Imagebutton androID:ID="@+ID/one"      androID:src="@drawable/dial_num_1_no_vm"            />        <Imagebutton androID:ID="@+ID/two"      androID:src="@drawable/dial_num_2"      />         <Imagebutton androID:ID="@+ID/three"      androID:src="@drawable/dial_num_3"      />         <Imagebutton androID:ID="@+ID/four"      androID:src="@drawable/dial_num_4"      />         <Imagebutton androID:ID="@+ID/five"      androID:src="@drawable/dial_num_5"      />        <Imagebutton androID:ID="@+ID/six"      androID:src="@drawable/dial_num_6"      />         <Imagebutton androID:ID="@+ID/seven"      androID:src="@drawable/dial_num_7"      />        <Imagebutton androID:ID="@+ID/eight"      androID:src="@drawable/dial_num_8"      />        <Imagebutton androID:ID="@+ID/nine"      androID:src="@drawable/dial_num_9"      />         <Imagebutton androID:ID="@+ID/star"      androID:src="@drawable/dial_num_star"      />          <Imagebutton androID:ID="@+ID/zero"      androID:src="@drawable/dial_num_0"      />          <Imagebutton androID:ID="@+ID/pound"      androID:src="@drawable/dial_num_pound"      />                                                       </demo.phone.card.MyPhoneCard> 

这样,就实现了上图的小键盘。这个例子参考AndroID自带电话应用的实现。可见,在开发中,灵活运用自定义的控件,可以实现独特而富有魅力的效果!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:解析android中隐藏与显示软键盘及不自动d出键盘的实现方法Android 显示和隐藏软键盘的方法(手动)Android 设置Edittext获取焦点并d出软键盘Android制作漂亮自适布局键盘的方法Android键盘显示与隐藏代码Android实现d出键盘的方法Android中监听软键盘显示状态实现代码Android 软键盘d出时把原来布局顶上去的解决方法Android键盘输入语言设置默认打开myanmar缅甸语的步骤Android软键盘遮挡的四种完美解决方案 总结

以上是内存溢出为你收集整理的Android自定义控件之电话拨打小键盘全部内容,希望文章能够帮你解决Android自定义控件之电话拨打小键盘所遇到的程序开发问题。

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

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

原文地址: https://www.outofmemory.cn/web/1142780.html

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

发表评论

登录后才能评论

评论列表(0条)

保存