Android开发-动态添加与button响应(手机拨号界面的实现)

我们知道可以在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值