涉及技术

Pager控件、Menu使用、短信电话调用

第一步:创建菜单

上篇文章我们已经创建好了主界面,但是仅仅只展示这么一点信息是完全不够的吸引面试官的,所以我们得继续加一些需求。
如果我们成功的让HR或者面试官安装了这个程序,那么我们得让他除了能看我们的信息之外,还能有其他更方便的功能,这个时候我就想到了加一个直接给咱发短信和打电话的功能。我决定将这两个功能加到我们主界面的菜单中。
首先复写onCreateOptionsMenu和onOptionsItemSelected。在onCreateOptionsMenu中,我们创建菜单项;在onOptionsItemSelected中,我们处理每个菜单项点击的事件。这是创建菜单项的代码:
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, 1, 1, "电话联系我");
        menu.add(0, 2, 2, "短信通知我");
        return super.onCreateOptionsMenu(menu);
    }

这是处理点击事件的代码:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == 1) {
            //电话联系
            
        } else if(item.getItemId() == 2) {
            //短信通知
            
        }
        return true;
    }

接下来我们就可以集中处理业务了。

关于Intent,大家应该都很熟了,用Intent可以很简单跳转Activity,启动Service等,我们都是使用的Intent的  public Intent (Context packageContext, Class cls)  这个构造方法,Intent的另一个构造方法也很实用:public Intent (String action, Uri uri) 。它允许我们传入一个动作地址和一个数据URI来执行一个操作,Intent中有很多系统定义好了的动作地址,其中就包括了我们要用的发送短信和打电话的动作地址,具体可以看看这里
直接来看看我们打电话的例子:
 //电话联系
 Intent intent = new Intent(Intent.ACTION_CALL, Uri
         .parse("tel:"+ MY_PHONE_NUMBER));
 startActivity(intent);

很简单的代码,Intent.ACTION_CALL表示的是调用打电话的程序,同时我们传入一个表示数据的Uri,关于这个Uri的格式,在文档中的Input有说,也就是tel: 接上电话号码,这样的格式。再看发短信的例子:

 //短信通知
 Uri uri = Uri.parse("smsto:"+ MY_PHONE_NUMBER);
 Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
 intent.putExtra("sms_body", "你好,谢景扬同学。");
 startActivity(intent);

我们使用了Intent.ACTION_SENDTO,传递一个smsto: 接上电话号码,就可以实现发短信给某人,同理,emailto:接邮箱地址就可以发送邮件。同时,我们还要给短信添加内容,添加的方式如代码所示,这里你也可以更自信的写:“你好,谢景扬同学,恭喜你已经通过了我们公司的面试。”
我们创建好的菜单就是下面的样子,还有发短信的界面:


第二步:头像点击

我们的圆形头像照片之前做好了,在上一篇文章中已经加上了点击的事件,但是还没定义这个PhotoClickListener,这个类非常简单,直接跳转到我们要跳转的类就可以,下一个类就取名为PagerActivity,这样的话代码如下:
    private class PhotoClickListener implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            
            Intent i = new Intent(context, PagerActivity.class);
            startActivity(i);
        }
    }

到此,MainActivity就已经完成了,完整的代码请看这里

第三步:设计PagerActivity

上一步已经定了点击头像后跳转到的这个类的名字,接下来就创建它。我们先看看要达到的效果:
这个样子的控件大家应该见过很多次,这是在android 3.0时发布的一个新控件,但是google还是为低版本的android发布了一个兼容包,让低版本的程序能够使用这个控件,这个兼容包的名字是android-support-v4.jar。
有了这个兼容包,我们很容易就能够实现这个可以左右滑动切换View的效果了,我们新建一个Activity并且开始布局,布局如下:




    

        
    

因为我们使用的是自定义控件,所以要写全控件所在的包名。这里我还定义了一个style,用于统一应用程序的背景,方便维护更改,style定义如下:

    

这个时候我们还看不出效果,因为还没有为ViewPager添加数据,ViewPager同样是基于Adapter来处理数据的,它有一个特有的Adapter叫PagerAdapter,我们创建一个内部类继承PagerAdapter,复写该复写的方法,如果你写过ListView,那么看到这些方法应该很容易上手,没用过ListView也没关系,看一次就明白这些方法的意思了。
首先我们得有两个数据集,来存放用于切换的View和对应显示的标题:

其中viewList添加的两个变量是我们后面要设计的两个View。现在就可以看看Adapter是怎么创建的了:
    private class MyPagerAdapter extends PagerAdapter {
        @Override
        public int getCount() {
            return viewList.size();
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            //return super.instantiateItem(container, position);
            container.addView(viewList.get(position));
            return viewList.get(position);
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            //super.destroyItem(container, position, object);
            container.removeView(viewList.get(position));
        }

        @Override
        public CharSequence getPageTitle(int position) {
            //return super.getPageTitle(position);
            return titleList.get(position);
        }

        @Override
        public boolean isViewFromObject(View view, Object o) {
            return view == o;
        }
    }

这段代码要我解释,我也说不出什么,方法名称已经很容易理解了,而且基本就是这个模式了,以后再写个PagerAdapter估计也就是差不多的代码,所以就不解释了。

结尾

下一篇文章会设计PagerView中显示的两个View。
扯下淡,希望这个程序能激发大家的想象力,多想出这样的一些点子,做一些实用的小程序,分享出来。我也非常大家给我提建议和意见,我都会接受的。
最后还是那句,程序已经托管到了Github,欢迎大家去下载,如果你比较懒不想自己写一个Android版本的简历,可以直接check下来,修改一下数据和照片就可以用了。
分类: 前端

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注