我们知道可以在xml里面加控件,加一些属性,今天给大家带来的是通过动态添加的方式去设计一个手机拨号界面,而且button设置了响应。
首先是前期的准备工作,虽然我们要做动态添加,但是我的前台布局还是有一点设计的。
因为我需要在前台给这几个tablerow设置id,方便我后台获取他们。
<TableLayout
android:id="@+id/tabl"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableRow>
<EditText
android:id="@+id/tel_num"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Button
android:id="@+id/del"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/x"/>
</TableRow>
<TableRow
android:id="@+id/tabr1">
</TableRow>
<TableRow
android:id="@+id/tabr2">
</TableRow>
<TableRow
android:id="@+id/tabr3">
</TableRow>
<TableRow
android:id="@+id/tabr4">
</TableRow>
这里有5个tableRow,第一个布局里面是编辑框和一个delete的button,可以删除刚刚输入的按键,下面有4个tableRow,因为我们知道手机拨号界面是有4行的嘛。
重点来了,我们如何在java文件里面写添加button呢。其实很简单,我们需要先定义button类的一些东西。
private Button delet;
private Button num_1;//1号键
这样类似的吧,然后通过new button(this)实例化他们,当然这里我把context赋值为this,这样我们就可以对这些button进行监听了。
例如:
//给第一行数字按键添加一个123;
context = this;
num_1 = new Button(context);
num_2 = new Button(context);
num_3 = new Button(context);
num_1.setText("1");
num_2.setText("2");
num_3.setText("3");
final TableRow tableRow1 = (TableRow)findViewById(R.id.tabr1);//布局管理
tableRow1.addView(num_1);
tableRow1.addView(num_2);
tableRow1.addView(num_3);
这里我们给第一行添加123,首先便是实例化,然后设置button的内容,使用settext,然后利用大家比较熟悉的 findviewbyid做布局管理,找到前台的响应的tablerow,然后利用addview添加进去就搞定了,其他的添加与此类似。
接下来讲讲对button监听的问题,我们设置了这么多button还有一个是delete,难道要一个一个监听吗,当然是可以简化的。我们可以使用view 父类 定义一个监听器listener监听所有就ok了。
View.OnClickListener listener = new View.OnClickListener()
{
@Override
public void onClick(View view){
//EditText test = telview.getText();
if(((Button) view).getText().toString().equals("X")){
int len = telview.getText().toString().length();//得到当前字符串的长度
String temp = telview.getText().toString();
String lastinput = temp.substring(0,(len-1));
telview.setText(lastinput);
}else{
telview.requestFocus();//获取焦点
telview.setText(telview.getText().toString() + ((Button) view).getText());
}
}
};
首先我们是要先判断我们按下的button是哪个button,我们才能操作,所以使用getText().tostring().equals进行判断,如果是删除键,这里删除键的实现方法很多,刚开始,博主想定义两个字符串,其中一个完全copy当前editview里面的内容,然后通过一个for循环把前len-1项赋值给第二个字符串就ok了,后来查api,得到java里面有subString()函数,可以截取字符串,里面的两个参数,第一个是起始位置(包括进去),注意第二个是终止位置(是不包括进去的)。谨记谨记。
剩下的就是输入键了,大同小异,获取当前editview里面的内容然后拼接button的内容,完成。
不过大家要注意,博主后来发现如果editview里面没有内容,如果按delete是会崩掉的,因为这里没有加判断,所以朋友们可以加一个isEmpty() 的判断,然后加点提示语就ok了。
最后我们要给每一个button加监听。
num_0.setOnClickListener(listener);
num_1.setOnClickListener(listener);
num_2.setOnClickListener(listener);
num_3.setOnClickListener(listener);
num_4.setOnClickListener(listener);
num_5.setOnClickListener(listener);
num_6.setOnClickListener(listener);
num_7.setOnClickListener(listener);
num_8.setOnClickListener(listener);
num_9.setOnClickListener(listener);
num_star.setOnClickListener(listener);
num_wells.setOnClickListener(listener);
delet.setOnClickListener(listener);
这样的一个简单的手机拨号界面就完成了。
附上项目下载链接:http://download.csdn.net/detail/qq_14908027/9210717