GridView is a ViewGroup that displays items in a two-dimensional, scrollable grid.(这里GroidView作为一个View容器,负责二维显示view控件,和ListView类似),下面通过对Android帮助文档的例子作修改后所完成的效果:
http://xiaolongque.iteye.com/picture/92946
<在显示图片的同时显示文字>
例子中这丑狗的图片可从下载http://developer.android.com/shareables/sample_images.zip
好的,首先我们先把图片保存到res/drawable文件夹中
定义以下两个布局文件
<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dip" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" />
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="test" /> </LinearLayout>
其中child.xml中定义GridView中每一点的子控件内容
Activity如下:
package com.xl; /* * author by Que */ import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; public class HelloGridView extends Activity { private GridView gridView ; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gridView = (GridView)findViewById(R.id.gridview); NewAdapter adapter = new NewAdapter(HelloGridView.this); gridView.setAdapter(adapter); } public class NewAdapter extends BaseAdapter{ public final class ViewHolder{ ImageView img; TextView text1; } private LayoutInflater layout = null; public NewAdapter(Context context) { //获取上下文对象 this.layout = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return mThumbIds.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder ; if(convertView == null) { holder = new ViewHolder(); convertView = layout.inflate(R.layout.child, null); holder.img = (ImageView)convertView.findViewById(R.id.iv); holder.text1 = (TextView)convertView.findViewById(R.id.tv); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } holder.img.setImageResource(mThumbIds[position]); //holder.img.setLayoutParams(new GridView.LayoutParams(85,85)); holder.img.setScaleType(ImageView.ScaleType.CENTER_INSIDE); holder.img.setPadding(8, 8, 8, 8); return convertView; } private final Integer[] mThumbIds = { R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7, R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 }; } }
通过继承BaseAdapter,根据getCount来调用getView对数据进行一一映射。其中
convertView = layout.inflate(R.layout.child, null); holder.img = (ImageView)convertView.findViewById(R.id.iv); holder.text1 = (TextView)convertView.findViewById(R.id.tv);
Inflate a new view hierarchy from the specified xml resource.(从一个xml布局文件中获取view层次结构并赋予convertView,通过convertView来实例化ImageView和TextView组件。由此我们可以在里面对布局文件中所包含的所有控件进程初始化处理,如设置事件监听。
发送短信
首先新建个android项目
对短信发送界面分析 进行简单的布局
短信发送界面布局由4个组件组成
输入电话号码label EditText
输入短信label EditText 这个EditText里面可以设置显示最小行数为3
电话拨打按纽 为获取短号号码 短信内容 按钮点击时间分别添加id 方便获取对象
在MainActivity.java文件中 给按钮添加点击时间 ,类似于电话拨打的事件处理。
发送短信 android提供的库中个 smsManager 方法
SmsManager sms = SmsManger.getDefault();
Sms.sentTextMessage……….
smsManager.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)
destinationAddress 这个是目的地的地址 即发送短信的号码
scAddress短信中心地址,默认用移动网络设置成null
sentIntent, deliveryIntent 发送状态 和接受状态 占时设为null
分析:当我们发送一条短信内容过长的时候 ,手机自动把我们的短信分成若干条进行发送。
所以我们获取短信都额文本 smscontent 可以用对象提供的方法
ArrayList<String> divideMessage = smsManager.divideMessage(content);
可以用增强for循环,对信息内容进行迭代。
发送短信我们要给移动付费,牵扯到钱的问题,我们必须经过用户同意,是否要安装我们开发的软件,所以在清单中我们要加入权限。回想电话拨打添加权限我们参考的是源码,这次我们才用文档查看。
查看方法 androidàManifest.permission进入链接就可以看到权限
我们根据联想 进行搜索我们需要的权限 send_sms android.permission.SEND_SMS
然后在清单中加入许可证 ,在真机中安装就会有由谷歌提供的相应提示界面。
当短信发送成功的时候 希望给我们个回馈信息,可以用四个方法做
1. 对话框
2. 状态栏提示
3. 吐西 类似小水泡状的对话框 淡出淡进 Toas
这里我们采用Toas ,当短信发送成功给我们发送成功的回馈信息
Toast.makeText(context, resId, duration)
第一个参数 是toast显示在那个上下文上 ,这里我们显示在MainActivity.this上面
Resid 显示的是吐西上面的文字
Duration 延续的时间 可以是1 和0 1的时间长点 0 时间持续短点
内部类调用外部类的方法 类名.this.方法 可以省略类名.this 直接调用方法名字
上下文存放的是系统文件和应用的数据信息,通过查看源码activity其实也是个context。上下文主要是把各层进行联系起来。
把写好的程序部署到真是手机
右键 -àexportà导出类型为android applicationà创建一个证书
----……一步一步进行我们就可以生成 msm.apk文件 我们把apk文件上传到一个空间就可以用手机进行下载安装
对android手机初步了解:
Cpu:1G 内存:768 操作系统:2.2 屏幕分辨率:480*800
在测试的时候也可以直接把手机用数据线链接到电脑上 然后用设备管理对其进行操作,或者把生成的msm.apk文件导入到sdk卡上进行安装。
通常我们在互联网上下载的文件存在于sd/cardàdowload的文件夹下面
首先,需要导入AudioToolbox.framework库,然后在实现文件中引入进来:
#import <AudioToolbox/AudioToolbox.h>
接着,写一个播放声音的方法。
- (void)playSound{ NSString *path = [[NSBundle mainBundle] pathForResource:@"win" ofType:@"wav"]; SystemSoundID soundID; AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path] , &soundID); AudioServicesPlaySystemSound (soundID); }
当按钮按下时进行调用:
- (IBAction) btnPressed{ [self performSelector:@selector(playSound) withObject:nil afterDelay:.5]; }