基于Android的短信应用开发(一)——界面设计开发
刚刚接触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的短信应用开发(一)——界面设计开发相关推荐
- 基于Android的短信应用开发(六)——将发出短信存至数据库
到目前为止,我们所做的工作都是从手机数据库读取数据并加以显示,而这一次,我们要开始尝试其他类型的操作了,就是将用户发出的信息存至手机短信数据库中,按照惯例,还是先上图,看看效果怎么样再说吧. ...
- 基于Android的短信应用开发(三)——读取手机短信
在上一次的学习中,我们读取了手机联系人并将其显示在短信界面上,而接下来,我们将开始读取手机短信了,下面先来看一下最终运行效果图吧. 首先看一下手机短信数据库,访问路径是:/data/data/com. ...
- 基于android的短信收发,android 短信接收短信 与发送短信源码
[实例简介] [实例截图] [核心代码] package cn.dccssq; import android.content.BroadcastReceiver; import android.con ...
- 基于Android的短信管理系统
环境:Android studio3.4+ sqlite数据库基本的增删该查 在这里插入图片描述 package com.admin.sms;import android.annotation.Sup ...
- android编程怎么发送,Android 发送短信程序
搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. mButton1.setOnClickListener(new Button.O ...
- 基于redis的短信验证码服务开发
基于redis的短信验证码服务开发 目前可以提供的验证码服务平台有很多,这里选择阿里大于短信验证码服务平台,里面有10元体验卷可以免费试用,不多说上代码.写代码之前需要去阿里大于平台申请验证码服务,同 ...
- Android之——短信的备份与还原
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 眼下,Android手机中的一些软件能够实现手机短信的备份与还原操作 ...
- Android发送短信SMS的编程
手机发送短信SMS是一个非常重要的通信功能,如果使用好短信功能,可以开发出杀手级的应用. 令开发者高兴的是,Android开发中,可以使用模拟器直接进行发送短信的测试.下面简单介绍下在Android发 ...
- android 短信转发设置权限,用Tasker实现Android手机短信转发到钉钉
之前的一篇文章[<用Tasker实现Android手机短信转发到微信>](https://taskerm.com/2018/12/22/forwarded-sms-to-wechat. ...
最新文章
- 干货|2018年中国智能硬件行业现状与发展趋势报告
- SQL Server 之AdventureWorks 2008 安
- python在哪里学比较好-Python学习在哪里比较好?
- frameset小结
- proDAD Erazr便携版
- python读取序列5之后的数据_Python核心编程读笔 5: python的序列
- Navicat 连接MariaDB 失败: Host '*' is not allowed to connect to this MariaDB server
- C++老话题:用指向函数的指针作函数参数
- 10 行 Python 代码自动清理电脑内重复文件,解放双手!
- 北上广等一线城市 IT 岗位已接近饱和?
- 联想笔记本怎么开启无线网络?
- JAVA_JSP考勤带请假的管理系统
- 安装第三方库,出现“error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual……”解决方案
- python参数类型为uint8_Python 改变数组类型为uint8的实现
- 不会吧不会吧,不会真有人还不会算时间复杂度吧?用十分钟让你明白如何计算时间复杂度
- CSAPP第八、九章家庭作业(原书第二版)
- Linux下vim的复制、粘贴操作
- Python - yamail - 进阶之路 - Day08
- CSS 自定义Radio样式
- python求和函数1-n_python 用for循环实现1~n求和的实例