Android项目之weiyi通讯录(一)
好久没有写博客了,这几天都在忙这找工作也没有时间写博客,这周想休息下 就做了这个小项目,当练习
凌晨了还在这是写博客 希望能帮助到需要的人
先说说这个项目的功能吧 有联系人列表,通话记录,短信记录,设置。可能后期会加入一些功能,这个项目主要使用类似微信UI效果,个人觉得还不错哦
在联系人列表使用了自定义控件,等等吧后面会介绍的
-----------欢迎加入交流群 386451316 有问题一起讨论吧
请注明转载地址 这么晚写不容易啊
先看看效果图吧 这是第一个模块 接下来会继续更新的
今天先介绍 Fragment+RadioButton替代tabhost 貌似是最流行的模式,,
接下来介绍布局看图
activity_main.xml文件
<RelativeLayout xmlns:andactivity_main.xmlroid="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:background="#FFF" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@+id/titlelayout" > </android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/titlelayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" > <RadioGroup android:id="@+id/tab_menu" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/tab_bg_normal" android:orientation="horizontal" > <RadioButton android:id="@+id/title1" style="@style/tab_style" android:checked="true" android:drawableTop="@drawable/tab_activity_selector" android:text="联系人" /> <RadioButton android:id="@+id/title2" style="@style/tab_style" android:drawableTop="@drawable/tab_activity_selector" android:text="通话记录" /> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <RadioButton android:id="@+id/title3" style="@style/tab_styles" android:drawableBottom="@drawable/tab_activity_selector" /> </FrameLayout> <RadioButton android:id="@+id/title4" style="@style/tab_style" android:drawableTop="@drawable/tab_activity_selector" android:text="短信" /> <RadioButton android:id="@+id/title5" style="@style/tab_style" android:drawableTop="@drawable/tab_activity_selector" android:text="设置" /> </RadioGroup> </LinearLayout> </RelativeLayout>
每一页文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tv_tab4" android:layout_width="fill_parent" android:layout_height="match_parent" android:text="信息列表" android:textSize="28sp" /> </RelativeLayout>
以上都是布局文件 有基础的都能看得懂吧 其实这一期的都是基础
package com.zw.weiyi.phonesms; import java.util.ArrayList; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.RadioButton; import android.widget.Toast; import com.zw.weiyi.fragment.CallFragment; import com.zw.weiyi.fragment.InfoFragment; import com.zw.weiyi.fragment.SettingFragment; import com.zw.weiyi.fragment.SmsFragment; import com.zw.weiyi.util.MyApplication; /** * * @author Striver_zw * Date 2014-11-19 */ public class MainActivity extends BaseActivity implements OnPageChangeListener { private ViewPager pager; private PagerAdapter mAdapter; private ArrayList<Fragment> fragments; private ArrayList<RadioButton> title = new ArrayList<RadioButton>();// 4个标题 //拨号按钮 private RadioButton bu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// /slidingmenu里面重写了 initView();// 初始化控件 initTitle(); initViewPager(); bu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "中间的", 1).show(); } }); } /** * 初始化视图 */ private void initView() { bu = (RadioButton) findViewById(R.id.title3); pager = (ViewPager) findViewById(R.id.pager);// 初始化控件 fragments = new ArrayList<Fragment>();// 初始化数据 fragments.add(new InfoFragment(this)); fragments.add(new CallFragment()); // fragments.add(new PhoneFragment()); fragments.add(new SmsFragment()); fragments.add(new SettingFragment(this)); } /** * 初始化ViewPager */ private void initViewPager() { mAdapter = new MyViewPagerAdapter(getSupportFragmentManager(), fragments); pager.setAdapter(mAdapter); pager.setOnPageChangeListener(this); pager.setCurrentItem(0);// 设置成当前第一个 } /** * 初始化几个用来显示title的RadioButton */ private void initTitle() { title.add((RadioButton) findViewById(R.id.title1));// 三个title标签 title.add((RadioButton) findViewById(R.id.title2)); // title.add((RadioButton) findViewById(R.id.title3)); title.add((RadioButton) findViewById(R.id.title4)); title.add((RadioButton) findViewById(R.id.title5)); title.get(0).setOnClickListener(new MyOnClickListener(0));// 设置响应 title.get(1).setOnClickListener(new MyOnClickListener(1)); title.get(2).setOnClickListener(new MyOnClickListener(2)); title.get(3).setOnClickListener(new MyOnClickListener(3)); } /** * 重写OnClickListener的响应函数,主要目的就是实现点击title时,pager会跟着响应切换 * * @author * */ private class MyOnClickListener implements OnClickListener { private int index; public MyOnClickListener(int index) { this.index = index; } @Override public void onClick(View v) { pager.setCurrentItem(index);// 把viewpager的视图切过去,实现捏造title跟pager的联动 title.get(index).setChecked(true);// 设置被选中,否则布局里面的背景不会切换 } } /** * 下面三个是OnPageChangeListener的接口函数 */ @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { title.get(arg0).setChecked(true);// 保持页面跟按钮的联动 } //记录退出次数 protected int dFilnish=0; //拦截触摸事件 @Override public boolean dispatchTouchEvent(MotionEvent ev) { dFilnish=0;//清零 误按处理 return super.dispatchTouchEvent(ev); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){//回退键 dFilnish++; if(dFilnish==1){ Toast.makeText(this, "再点击就退出", Toast.LENGTH_LONG).show(); }else if(dFilnish ==2){ MyApplication.getInstance().AppExit(); // super.finish(); } return true; } return super.onKeyUp(keyCode, event); } }以上代码都有注释的应该不是很难
每一页的java代码
package com.zw.weiyi.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.zw.weiyi.phonesms.R; public class PhoneFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.phone_fragment, container, false); // 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生IllegalStateException。 ViewGroup parent = (ViewGroup) view.getParent(); if (parent != null) { parent.removeView(view); } return view; } }
使用适配器 FragmentPagerAdapter 加载到里面 看代码吧
package com.zw.weiyi.phonesms; import java.util.ArrayList; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; /** * 这个adapter里面有Fragment数组 * @author Striver_zw * Date 2014-11-19 */ public class MyViewPagerAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> fragments;//需要添加到上面的Fragment public MyViewPagerAdapter(FragmentManager fm) { super(fm); } /** * 自定义的构造函数 * @param fm * @param fragments ArrayList<Fragment> */ public MyViewPagerAdapter(FragmentManager fm,ArrayList<Fragment> fragments) { super(fm); this.fragments = fragments; } @Override public Fragment getItem(int arg0) { return fragments.get(arg0);//返回Fragment对象 } @Override public int getCount() { return fragments.size();//返回Fragment的个数 } }
今天就到这里吧先把框架搭建起来了
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。