刚刚接触Android开发,最近自己在上手开发一个手机短信应用,由于是从头开始开发,首先还是得设计实现界面,初步效果如图:

程序代码如下

1.MainActivity.java

package com.example.mymessageproject;import java.util.ArrayList;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;public class MainActivity extends Activity {private ListView messageListView;private ArrayList messageList = new ArrayList();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);messageListView = (ListView)this.findViewById(R.id.listView1);MessageListAdapter adapter = new MessageListAdapter(this);adapter.init();messageListView.setAdapter(adapter);adapter.notifyDataSetChanged();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

2.适配器类MessageListAdapter.java

package com.example.mymessageproject;import java.util.ArrayList;
import java.util.List;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;public class MessageListAdapter extends BaseAdapter{private LayoutInflater mInflater;  private Context mContext = null;  private ArrayList<String> aDataList = new ArrayList<String>();public void init(){for(int i=1;i<=10;i++){aDataList.add("发件人"+i);//return;}}public MessageListAdapter(Context context) {  mContext = context;  mInflater = LayoutInflater.from(mContext);  }  public Object getItem(int arg0) {  // TODO Auto-generated method stub  return arg0;  }  public long getItemId(int position) {  // TODO Auto-generated method stub  return position;  }  public int getCount() {  // TODO Auto-generated method stub  return aDataList.size();  }  public View getView(int position, View convertView,  android.view.ViewGroup parent) {  final ImageView indexImage;  final TextView titleText;final TextView descText;final TextView countText;final TextView timeText;if (convertView == null) {  // 和item_custom.xml脚本关联  convertView = mInflater.inflate(R.layout.list_item, null);  }  indexImage = (ImageView)convertView.findViewById(R.id.index_image);titleText = (TextView)convertView.findViewById(R.id.titleTextView);descText = (TextView)convertView.findViewById(R.id.descTextView);countText = (TextView)convertView.findViewById(R.id.countTextView);timeText = (TextView)convertView.findViewById(R.id.timeTextView);String strText = aDataList.get(position);// 设置item中4个TextView的文本  titleText.setText(strText);descText.setText("消息内容");   countText.setText(""+aDataList.size());timeText.setText("收件时间");// 设置item中ImageView的图片  indexImage.setBackgroundResource(R.drawable.ic_launcher);  return convertView;  }
} 

3.布局文件AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.mymessageproject"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="18" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.mymessageproject.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

4.MainActivity布局文件activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><TextViewandroid:id="@+id/textView1"android:layout_width="fill_parent"android:layout_height="35dip"android:text="@string/headline"android:textSize="28sp"android:layout_alignParentLeft="true"android:layout_alignParentTop="true" /><ListViewandroid:id="@+id/listView1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView1"android:layout_below="@+id/textView1"android:layout_marginBottom="50dip"></ListView><Buttonandroid:id="@+id/button1"android:layout_width="fill_parent"android:layout_height="50dip"android:layout_alignLeft="@+id/listView1"android:layout_alignParentBottom="true"android:text="新信息" /></RelativeLayout>

5.短信内容列表项布局文件list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="wrap_content"android:layout_marginTop="10dip"android:layout_marginBottom="10dip"android:layout_marginLeft="10dip"android:layout_marginRight="10dip">       <ImageView android:id="@+id/index_image"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  >  </ImageView>  <TextView android:id="@+id/titleTextView"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_alignParentTop="true"android:layout_toRightOf="@id/index_image"  android:textSize="18sp"  />  <TextView android:id="@+id/descTextView"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_toRightOf="@id/index_image"  android:layout_below="@id/titleTextView"  android:textSize="10sp"  />        <TextView android:id="@+id/countTextView"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_alignParentRight="true"  android:textSize="18sp"  android:layout_marginRight="10dip"/><TextView android:id="@+id/timeTextView"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_alignParentRight="true"android:layout_alignParentBottom="true"android:textSize="10sp"android:layout_marginRight="10dip"  /></RelativeLayout>  

从activity_main.xml布局文件可以看出,短信界面的主要组成部分是中间的一个ListView,在实际写界面的过程中,为达到文章开头界面效果,遇到的主要问题是怎样自定义列表项,和如何将列表项布局文件list_item.xml关联到原来的列表ListView,通过查阅资料并动手实践,最终解决如下:

问题一:自定义列表项布局

解决方案:新建list_item.xml文件,如上文5所示,采用RelativeLayout布局方式,确定短信列表项中五个控件的宽度,高度,边界空白和各个控件之间的相对位置,初步实现短信主界面单个会话显示效果。但是,由于在这里的消息内容是只有固定的四个字,看上去好像没有什么问题,但是在之后实际读取手机数据库短信内容并显示时,发现在当要显示的短信内容比较长时,这个列表项布局实际上是存在问题的,这个问题留到后面实际显示手机短信时再说明。

问题二:关联列表项布局文件list_item.xml到ListView

解决方案:使用适配器BaseAdapter,创建适配器MessageListAdapter并继承BaseAdapter,在getView方法中通过操作:

convertView = mInflater.inflate(R.layout.list_item, null);达到关联目的。

另外,在这个版本中,列表项界面右上角显示的数据“10”是ListView中列表项的项数,而实际上这里显示的应该是每个短信会话的消息数,这个问题同样也需要等到从手机数据库读取短信时再解决。

学习总结:

1.要自定义ListView列表项格式,可以在Adapter的getView(int position, View convertView, android.view.ViewGroup parent)方法中使用语句convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, null),从而关联自定义格式文件list_item.xml;

2.为控件创建适配器Adapter并使其继承BaseAdapter,可在创建的Adapter中为控件关联相关数据,如需要在控件中显示的内容等。

参考文章链接:

http://blog.csdn.net/ansionnal/article/details/8478151

http://www.cnblogs.com/mybkn/archive/2012/05/23/2514681.html

基于Android的短信应用开发(一)——界面设计开发相关推荐

  1. 基于Android的短信应用开发(六)——将发出短信存至数据库

    到目前为止,我们所做的工作都是从手机数据库读取数据并加以显示,而这一次,我们要开始尝试其他类型的操作了,就是将用户发出的信息存至手机短信数据库中,按照惯例,还是先上图,看看效果怎么样再说吧.      ...

  2. 基于Android的短信应用开发(三)——读取手机短信

    在上一次的学习中,我们读取了手机联系人并将其显示在短信界面上,而接下来,我们将开始读取手机短信了,下面先来看一下最终运行效果图吧. 首先看一下手机短信数据库,访问路径是:/data/data/com. ...

  3. 基于android的短信收发,android 短信接收短信 与发送短信源码

    [实例简介] [实例截图] [核心代码] package cn.dccssq; import android.content.BroadcastReceiver; import android.con ...

  4. 基于Android的短信管理系统

    环境:Android studio3.4+ sqlite数据库基本的增删该查 在这里插入图片描述 package com.admin.sms;import android.annotation.Sup ...

  5. android编程怎么发送,Android 发送短信程序

    搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. mButton1.setOnClickListener(new Button.O ...

  6. 基于redis的短信验证码服务开发

    基于redis的短信验证码服务开发 目前可以提供的验证码服务平台有很多,这里选择阿里大于短信验证码服务平台,里面有10元体验卷可以免费试用,不多说上代码.写代码之前需要去阿里大于平台申请验证码服务,同 ...

  7. Android之——短信的备份与还原

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 眼下,Android手机中的一些软件能够实现手机短信的备份与还原操作 ...

  8. Android发送短信SMS的编程

    手机发送短信SMS是一个非常重要的通信功能,如果使用好短信功能,可以开发出杀手级的应用. 令开发者高兴的是,Android开发中,可以使用模拟器直接进行发送短信的测试.下面简单介绍下在Android发 ...

  9. android 短信转发设置权限,用Tasker实现Android手机短信转发到钉钉

    ​ 之前的一篇文章[<用Tasker实现Android手机短信转发到微信>](https://taskerm.com/2018/12/22/forwarded-sms-to-wechat. ...

最新文章

  1. 干货|2018年中国智能硬件行业现状与发展趋势报告
  2. SQL Server 之AdventureWorks 2008 安
  3. python在哪里学比较好-Python学习在哪里比较好?
  4. frameset小结
  5. proDAD Erazr便携版
  6. python读取序列5之后的数据_Python核心编程读笔 5: python的序列
  7. Navicat 连接MariaDB 失败: Host '*' is not allowed to connect to this MariaDB server
  8. C++老话题:用指向函数的指针作函数参数
  9. 10 行 Python 代码自动清理电脑内重复文件,解放双手!
  10. 北上广等一线城市 IT 岗位已接近饱和?
  11. 联想笔记本怎么开启无线网络?
  12. JAVA_JSP考勤带请假的管理系统
  13. 安装第三方库,出现“error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual……”解决方案
  14. python参数类型为uint8_Python 改变数组类型为uint8的实现
  15. 不会吧不会吧,不会真有人还不会算时间复杂度吧?用十分钟让你明白如何计算时间复杂度
  16. CSAPP第八、九章家庭作业(原书第二版)
  17. Linux下vim的复制、粘贴操作
  18. Python - yamail - 进阶之路 - Day08
  19. CSS 自定义Radio样式
  20. python求和函数1-n_python 用for循环实现1~n求和的实例

热门文章

  1. pycharm pep8规范 个人问题总结
  2. Stata:Bootstrap 简介
  3. libjpeg安装和使用
  4. 使用Fiddler实现手机APP抓包
  5. 医疗器械行业CRM客户管理软件价值
  6. VisualGDB安装使用
  7. django之处理execl和zip
  8. 16种面试常见问题技巧回答
  9. 网络安全——文件包含漏洞
  10. 渗透测试学习之靶机DC-6