Android项目之weiyi通讯录(一)

2024-05-26 21:48
文章标签 android 项目 通讯录 weiyi

本文主要是介绍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.ViewPagerandroid:id="@+id/pager"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_above="@+id/titlelayout" ></android.support.v4.view.ViewPager><LinearLayoutandroid:id="@+id/titlelayout"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true" ><RadioGroupandroid:id="@+id/tab_menu"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/tab_bg_normal"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/title1"style="@style/tab_style"android:checked="true"android:drawableTop="@drawable/tab_activity_selector"android:text="联系人" /><RadioButtonandroid:id="@+id/title2"style="@style/tab_style"android:drawableTop="@drawable/tab_activity_selector"android:text="通话记录" /><FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content" ><RadioButtonandroid:id="@+id/title3"style="@style/tab_styles"android:drawableBottom="@drawable/tab_activity_selector" /></FrameLayout><RadioButtonandroid:id="@+id/title4"style="@style/tab_style"android:drawableTop="@drawable/tab_activity_selector"android:text="短信" /><RadioButtonandroid: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" ><TextViewandroid: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;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// /slidingmenu里面重写了initView();// 初始化控件initTitle();initViewPager();bu.setOnClickListener(new OnClickListener() {@Overridepublic 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;}@Overridepublic void onClick(View v) {pager.setCurrentItem(index);// 把viewpager的视图切过去,实现捏造title跟pager的联动title.get(index).setChecked(true);// 设置被选中,否则布局里面的背景不会切换}}/*** 下面三个是OnPageChangeListener的接口函数*/@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageSelected(int arg0) {title.get(arg0).setChecked(true);// 保持页面跟按钮的联动}//记录退出次数protected int dFilnish=0;//拦截触摸事件@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {dFilnish=0;//清零 误按处理return super.dispatchTouchEvent(ev);}@Overridepublic 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 {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic 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;//需要添加到上面的Fragmentpublic MyViewPagerAdapter(FragmentManager fm) {super(fm);}/*** 自定义的构造函数* @param fm* @param fragments ArrayList<Fragment>*/public MyViewPagerAdapter(FragmentManager fm,ArrayList<Fragment> fragments) {super(fm);this.fragments = fragments;}@Overridepublic Fragment getItem(int arg0) {return fragments.get(arg0);//返回Fragment对象}@Overridepublic int getCount() {return fragments.size();//返回Fragment的个数}
}

今天就到这里吧先把框架搭建起来了

这篇关于Android项目之weiyi通讯录(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005680

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下