android 笔记

android 笔记,第1张

概述 常用系统权限//互联网权限<uses-permissionandroid:name="android.permission.INTERNET"/>//拍摄<uses-permissionandroid:name="android.permission.CAMERA"/>//硬件<uses-featureandroid:name="android.hardware.camera"/>/  常用系统权限
//互联网权限<uses-permission androID:name="androID.permission.INTERNET"/>//拍摄<uses-permission androID:name="androID.permission.CAMERA" />//硬件<uses-feature androID:name="androID.harDWare.camera" />//写存储设备 写SD卡的权限<uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" />//捕获视频<uses-permission androID:name="androID.permission.RECORD_AUdio" />//得到图片信息<uses-permission androID:name="androID.permission.ACCESS_FINE_LOCATION" />//短信发送权限<uses-permission androID:name="androID.permission.SEND_SMS"/>//杀死进程<uses-permission androID:name="androID.permission.KILL_BACKGROUND_PROCESSES"/>//手机信息<uses-permission androID:name="androID.permission.READ_PHONE_STATE" />
查看keystore 数据

打开CMD命令行进入本机安装的jdk或jre下的bin目录
keytool -List -v -keystore C:\Users\Desktop\browser\deBUG.keystore -storepass androID
keytool -List -v -keystore C:\Users\admin\.androID\deBUG.keystore -storepass androID
MD5: F8:FA:D2:BB:04:72:6E:E6:5C:48:28:F1:14:F9:09:AF
SHA1: 88:C3:75:6F:6F:6C:51:09:00:B6:45:CB:BD:FC:84:B8:E7:F3:F1:10
SHA256: 5B:0C:B2:43:8C:49:4B:6C:5B:BB:F5:77:ED:76:EE:E0:9D:7D:6A:7D:16:A1:DF:AD:6F:FC:56:5F:F0:FC:8E:79
签名算法名称: SHA256withRSA
版本: 3

按钮点击的4中写法

1.创建一个内部类定义点击事件
setonClickListener(new qwe())//点击事件
qwe 需要实现  OnClickListener
2.匿名内部类定义点击事件
setonClickListener(new qwe{})
3setonClickListener(this)//本身的类需要实现OnClickListener
4.xml组件中添加onClick属性

拨打电话

Intent intent = new intent()
intent.setAction(Intent.ACTION_CALL)//指定事件  打电话
intent.setData(Uri.parse("tel:"+电话号码))
startActivity(intent)

进程 按优先级分为不同等级

1,前台进程:用户可以看见的某个Activity界面,可以 *** 作的界面
2,可见进程:用户仍可看见这个进程,某个Activity界面,但是用不可以 *** 作这个界面
3,服务进程:后台运行的服务进程
4,后台进程:没有服务进程,打开一个Activity之后 按了home键最小化
5, 空进程  :没有活动的组件,存在进程中
当内存不足时会自动回收5,4,释放资源 一般不会释放 1,2,3

sqlite需要继承 sqliteOpenHelper
//初始化并未创建(上下文,数据库名称,结果集(游标的对象null:系统默认的游标),数据库的版本(最小为1))PersonsqliteOpenHelper helper = new PersonsqliteOpenHelper(this, "mzw.db", null, 1);//创建数据库,getReadableDatabase:为可读的,getWritableDatabase:为可写的//得到数据库实例(可写)sqliteDatabase db = helper.getWritableDatabase();//得到数据库实例(可读)sqliteDatabase db = helper.getReadableDatabase();//PersonsqliteOpenHelper中有个onCreate方法,数据库第一次创建的时候调用 可再此方法中创建表db.execsql("create table person (ID integer primary key autoincrement,name varchar(20),number varchar(20))");//版本变化是调用onUpgrade
数据库 事务
//开启事务db.beginTransaction();try {    //数据虎 *** 作    db.execsql(sql, new Object[]{name});    //标记数据库事务执行成功    db.setTransactionSuccessful();} finally {    //关闭事务    db.endTransaction();    //关闭事务    db.close();}从0条开始 查询10条select * from user_chat limit 0,10
杀死进程
//得到自己进程的IDint myID = androID.os.Process.myPID();//杀死进程(只能用于自杀)androID.os.Process.killProcess(myID);//杀死别人  不能用于自杀ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);//需要权限   <uses-permission androID:name="androID.permission.KILL_BACKGROUND_PROCESSES"/>am.killBackgroundProcesses("com.example.message");return true;
Activity启动模式

清单中配置 androID:launchMode=

standard : 默认情况退出一个Activity,就把这个Activity从任务栈的栈顶移除,
    如果任务栈空了,应用程序就关闭了。但是注意,进程还是存在的,
singletop : 避免同一个界面会重复的开启,
    如果发现任务栈的栈顶已经有了这个Activity,再去开启Activity时,就不去重新创建了,而是复用这个栈顶已经存在的Activity
singleTask : 避免开启过多的Activity,以便节省内存和cpu资源
    开启一个Activity B的时候 会检查任务栈中是否存在这个Activity B,如果存在,就清空这个Activity B上面所有的Activity,然后复用这个Activity B
    
singleInstance : 单例模式 开启一个新的任务栈。任务栈中只有一个Activity实例
    如果Activity A开启,把A 任务栈放在前面。如果把Activity B开启,把B任务栈放在前面
    极端:在整个手机中只会有一个实例存在。

Intent.setFlags()函数用法:

Intent的常用Flag参数:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_top);

FLAG_ACTIVITY_CLEAR_top:
 例如现在的栈情况为:A B C D 。D此时通过intent跳转到B,如果这个intent添加FLAG_ACTIVITY_CLEAR_top标记,则栈情况变为:A B。
 如果没有添加这个标记,则栈情况将会变成:A B C D B。也就是说,如果添加了FLAG_ACTIVITY_CLEAR_top标记,并且目标Activity在栈中已经存在,
 则将会把位于该目标activity之上的activity从栈中d出销毁。这跟上面把B的Launch mode设置成singleTask类似。


FLAG_ACTIVITY_NEW_TASK:
 例如现在栈1的情况是:A B C。C通过intent跳转到D,并且这个intent添加了FLAG_ACTIVITY_NEW_TASK标记,如果D这个Activity在Manifest.xml中的声明中添加了Task affinity,
 并且和栈1的affinity不同,系统首先会查找有没有和D的Task affinity相同的task栈存在,如果有存在,将D压入那个栈,如果不存在则会新建一个D的affinity的栈将其压入。
 如果D的Task affinity默认没有设置,或者和栈1的affinity相同,则会把其压入栈1,变成:A B C D,这样就和不加FLAG_ACTIVITY_NEW_TASK标记效果是一样的了。
 注意如果试图从非activity的非正常途径启动一个activity,比如从一个service中启动一个activity,则intent必须要添加FLAG_ACTIVITY_NEW_TASK标记。

FLAG_ACTIVITY_NO_HISTORY:
 例如现在栈情况为:A B C。C通过intent跳转到D,这个intent添加FLAG_ACTIVITY_NO_HISTORY标志,则此时界面显示D的内容,但是它并不会压入栈中。如果按返回键,
 返回到C,栈的情况还是:A B C。如果此时D中又跳转到E,栈的情况变为:A B C E,此时按返回键会回到C,因为D根本就没有被压入栈中。

FLAG_ACTIVITY_SINGLE_top:和上面Activity的Launch mode的singletop类似。如果某个intent添加了这个标志,并且这个intent的目标activity就是栈顶的activity,那么将不会新建一个实例压入栈中。
Activity的主要属性:(在 AndroIDManifest.xml中 <activity  androID:XXX  />)
allowTaskreparenting:设置成true时,和Intent的FLAG_ACTIVITY_NEW_TASK标记类似。
alwaysRetainTaskStat:   如果用户长时间将某个task移入后台,则系统会将该task的栈内容d出只剩下栈底的activity,此时用户再返回,则只能看到根activity了。如果栈底的activity的这个属性设置成true,则将阻止这一行为,从而保留所有的栈内容。
clearTaskOnLaunch:根activity的这个属性设置成true时,和上面的alwaysRetainTaskStat的属性为true情况搞好相反。
finishOnTaskLaunch:对于任何activity,如果它的这个属性设置成true,则当task被放置到后台,然后重新启动后,该activity将不存在了。

清单中配置屏幕 横屏  竖屏

activity 标签中配置

androID:screenorIEntation=""
landscape : 水平
portrait : 竖屏

屏幕切换时,销毁原有的Activity 重新创建
androID:configChanges=""
orIEntation|keyboardHIDden|screenSize   不会销毁Activity

自定义广播 

自定义广播接收者

类要继承broadcastReceiver
设置自定义广播过滤器

<receiver androID:name="com.example.ipdail.SmsReceiver">    <intent-filter androID:priority="1000">广播优先级    <action androID:name="mzw.it.xxx"></action>自定义的    </intent-filter></receiver>

有了广播接收者 就需要有发送者

自定义广播发送者

//把自定义的广播发送出去Intent inten = new Intent();inten.setAction("mzw.it.xxx");sendbroadCast(inten);//发送一条无序的广播事件sendOrderedbroadCast(inten,null);//发送一条有序的广播事件//指定广播接受制。new Class 代表一个类,当指定这个接收者后,将忽略优先级、终止广播等sendOrderedbroadCast(inten,null,new Class,null,0,null,null);

如果广播是无序的,那么所有广播接收者将都会接受到这个事件
如果广播是有序的,那么广播接受者会按照优先级接收这个事件

高优先级 会先接受到这个事件,低优先级 会后接受到事件

有序广播特点:
高优先级的广播接受者可以终止掉广播
abortbroadcast();

系统时间
system.currenTimeMillis();if ((System.currentTimeMillis() - inputTime) > 2000) {  // 时间间隔大于2000毫秒,。。。}
 图片 *** 作exif获取图片信息
ExifInterface exif = new ExifInterface("/sdcard/test.jpg");//时间String time = exif.getAttribute(ExifInterface.TAG_DATETIME);//什么模式的相机(设备型号)String model = exif.getAttribute(ExifInterface.TAG_MODEL);//纬度String latttude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);//经度String longitude = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);// 图片长String length = exif.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);//图片宽String wIDth = exif.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);//设备制造商String make = exif.getAttribute(ExifInterface.TAG_MAKE);String msg = "\n设备型号:"+model+""		+ "\n设备制造商:"+make+""		+ "\n纬度:"+latttude+""		+ "\n经度:"+longitude+""		+ "\n图片长:"+length+""		+ "\n图片宽:"+wIDth+"";
保存图片
file file = new file(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");System.out.println("保存路径:"+file);//输出流fileOutputStream os = new fileOutputStream(file);//保存文件(保存格式,质量,流)newbitmap.compress(CompressFormat.JPEG, 100, os);//模拟一个消息通知,SD被重新挂载了Intent intent = new Intent();intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
图片水印
//copy图片并在上边写字Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.b9, opts);//1,创建一个空白图片,和原图片一样大Bitmap newbitmap = Bitmap.createBitmap(bitmap.getWIDth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);//2,得到一个画布Canvas canvas = new Canvas(newbitmap);//3,在画布上canvas.drawBitmap(bitmap, new Matrix(), new Paint());//Paint paint = new Paint();//canvas.drawText("我是拷贝图片", 10, 10, paint);return newbitmap;
图片缩放
Matrix matrix = new Matrix();matrix.setScale(x,y);canvas.drawBitmap(bitmap, new Matrix(), new Paint());
图片旋转
Matrix matrix = new Matrix();参数 :旋转度数(0 - 360),X,Y//bitmap.getWIDth()/2,bitmap.getHeight()/2  ---  以图片中心为 轴matrix。setScale(180,bitmap.getWIDth()/2,bitmap.getHeight()/2);//因为在旋转的时候会丢失像素所以 提供了一个方法Paint paint = new Paint();//消除锯齿(内部为算法)paint.setAntiAlias(true);canvas.drawBitmap(bitmap, new Matrix(), new Paint());
图片平移
Matrix matrix = new Matrix();//此方法canvas.drawBitmap执行完后变化matrix.setTranslate(X,Y)//此方法会立即执行matrix.postTranslate(X,Y)canvas.drawBitmap(bitmap, new Matrix(), new Paint());
图片镜面效果
Matrix matrix = new Matrix();matrix.setScale(x,y);//缩放matrix.postTranslate(X,Y)//平移//缩放时X为 -1//将图片平移(否则就看不见图了)
图片倒影效果
Matrix matrix = new Matrix();matrix。setScale(x,y);//缩放matrix.postTranslate(X,Y)//平移//缩放时Y为 -1//将图片平移(否则就看不见图了)
图片合成
//原理就创建一个画布 将两个图片加载到这个画布中canvas.drawBitmap(bitmap1, new Matrix(), new Paint());canvas.drawBitmap(bitmap2, new Matrix(), new Paint());/*但是有 16 种模式空白。显示1.显示2.显示1和2并且1在2上,显示1和2并且2在1上,显示1与2重叠的1部分,显示1与2重叠的2部分  等等*/Paint。setXfermode(new ProterDuffXfermode(androID.graphics.PorterDuff.Mode.XXXX))
多媒体mediaplayer   音频 

---  用来播放比较长得音频,如果用他播放短而密集的音频就会出现延迟

// 响铃  调用raw文件中的音乐文件MediaPlayer.create(this, R.raw.information).start(); // 响铃
SoundPool     音频 

---  可以播放短而密集的音频

private SoundPool soundPool;	private int soundID;	private Seekbar seekbar1;	private float ff;	@OverrIDe	protected voID onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentVIEw(R.layout.fragment_main);		seekbar1 = (Seekbar)super.findVIEwByID(R.ID.seekbar1);		//声音池的初始化(最多可放资源,)		soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);		//加载声音(上下文,资源,播放优先级),并且返回资源的ID		soundID = soundPool.load(this, R.raw.girl_sound, 1);		seekbar1.setMax(200);		seekbar1.setonSeekbarchangelistener(new OnSeekbarchangelistener() {			@OverrIDe			public voID onStopTrackingtouch(Seekbar seekbar) {				System.out.println("=getProgress="+seekbar.getProgress());				System.out.println("=getProgress="+seekbar.getProgress()/100.0f);				ff = seekbar.getProgress()/100.0f;				System.out.println("ff="+ff);				if(ff < 0.5f){					ff = 0.5f;				}				Toast.makeText(getApplicationContext(), "当前播放速度为:"+ff, 0).show();			}			@OverrIDe			public voID onStartTrackingtouch(Seekbar seekbar) {			}			@OverrIDe			public voID onProgressChanged(Seekbar seekbar, int progress,					boolean fromUser) {			}		});	}		public voID click(VIEw vIEw){		/**		 * 播放声音(声音ID,左边音量大小,		 * 右边音量大小(range = 0.0 to 1.0),		 * 优先级0最低(range = 0.0 to 1.0),		 * 循环模式(0 =没有循环,-1 =循环永远),		 * 率播放率(1.0 =正常播放,范围0.5 - 2.0)----就是播放速度		 * )		 */		soundPool.play(soundID, 1.0f, 1.0f, 0, 0, ff);	}
SurfaceVIEw   视频播放

原理:
分析:视频文件的格式
读取:文件的数据(把每一帧都转化成图片  显示到界面上)

SurfaceVIEw 采用了双缓冲计算 的技术

    原来的:解析帧 --> 显示画面 --> 解析帧 --> 显示画面 --> 。。。
    双缓冲:A线程:解析帧 --> 显示画面 --> 解析帧   --> 显示画面 --> 。。。
        B线程:           解析帧   --> 显示画面 --> 解析帧   --> 显示画面 --> 。。。
        实际上是两个线程不断的在切换后台解析与前台显示的动作

//设置监听,当返回桌面时暂停播放并记录播放进度,播放器重新启动时并指定进度播放sv.getHolder().addCallback(new Callback() {	@OverrIDe	public voID surfaceDestroyed(SurfaceHolder holder) {		// Todo auto-generated method stub		System.out.println("holder销毁了...");		if(mediaPlayer != null && mediaPlayer.isPlaying()){			currentposition = mediaPlayer.getCurrentposition();//得到当前不放的进度			stop();		}	}	@OverrIDe	public voID surfaceCreated(SurfaceHolder holder) {		// Todo auto-generated method stub		System.out.println("holder创建了...");		if(currentposition > 0){			start(currentposition);		}	}	@OverrIDe	public voID surfaceChanged(SurfaceHolder holder, int format, int wIDth,			int height) {		// Todo auto-generated method stub		System.out.println("holder分辨率改变了...");	}});mediaPlayer = new MediaPlayer();//指定播放文件的类型mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//指定视频在SurfaceVIEw组建中播放mediaPlayer.setdisplay(sv.getHolder());//加载文件mediaPlayer.setDataSource(url);//异步调用(准备)mediaPlayer.prepareAsync();//监听,是否加载完毕mediaPlayer.setonPreparedListener(new OnPreparedListener() {	@OverrIDe	public voID onPrepared(MediaPlayer mp) {		mediaPlayer.start();		mediaPlayer.seekTo(currentposition);		start.setEnabled(false);	}});//开始mediaPlayer.start();//暂停mediaPlayer.pause();////指定本地开始播放的位置mediaPlayer.seekTo(0);//暂停mediaPlayer.stop();//释放资源mediaPlayer.release();mediaPlayer = null;//得到当前不放的进度mediaPlayer.getCurrentposition()//得到视频的总程度mediaPlayer.getDuration();
通知对话框
public voID click1(VIEw vIEw){	//对话框的构造器	AlertDialog.Builder builder = new Builder(this);	//标题	builder.setTitle("对话框标题");	//图标(logo)	builder.setIcon(R.drawable.ic_launcher);	//对话框消息	builder.setMessage("是否继续?");	//确定按钮	builder.setPositivebutton("确定", new OnClickListener() {		@OverrIDe		public voID onClick(DialogInterface dialog, int which) {			Toast.makeText(MainActivity.this, "点击的是:确定", 0).show();		}	});	//取消按钮	builder.setNegativebutton("取消",new OnClickListener() {		@OverrIDe		public voID onClick(DialogInterface dialog, int which) {			// 取消后什么也不 *** 作		}	});	//创建对话框	builder.create().show();}
单选对话框
public voID click2(VIEw vIEw){	//对话框的构造器	AlertDialog.Builder builder = new Builder(this);	//标题	builder.setTitle("选择性别");	final String[] items = new String[]{"男性","女性"};	//设定单选扭	builder.setSingleChoiceItems(items, 0, new OnClickListener() {		@OverrIDe		public voID onClick(DialogInterface dialog, int which) {			// Todo auto-generated method stub			Toast.makeText(MainActivity.this, "选择的性别是:"+items[which],0).show();			//选中 后关闭对话框			dialog.dismiss();		}	});	//取消按钮	builder.setNegativebutton("取消",new OnClickListener() {		@OverrIDe		public voID onClick(DialogInterface dialog, int which) {			// 取消后什么也不 *** 作		}	});	builder.show();}
多选对话框
public voID click3(VIEw vIEw){	//对话框的构造器	AlertDialog.Builder builder = new Builder(this);	//标题	builder.setTitle("选择 爱好");	final String[] items = new String[]{"红色","橙色","黄色","绿色","蓝色"};	//设定单选扭boolean 为默认被选择	builder.setMultiChoiceItems(items, new boolean[]{true,false,false,false,false},			new OnMultiChoiceClickListener() {		@OverrIDe		public voID onClick(DialogInterface dialog, int which, boolean isChecked) {			// Todo auto-generated method stub			Toast.makeText(MainActivity.this, items[which]+":"+isChecked, 0).show();		}	});	//取消按钮	builder.setNegativebutton("取消",new OnClickListener() {		@OverrIDe		public voID onClick(DialogInterface dialog, int which) {			// 取消后什么也不 *** 作		}	});	builder.show();}
进度条对话框
public voID click5(VIEw vIEw){	final ProgressDialog pd = new ProgressDialog(this);	//进度样式(水平)	pd.setProgressstyle(ProgressDialog.STYLE_HORIZONTAL);	pd.setTitle("进度提醒");	pd.setMessage("正在加载中...");	//对大进度	pd.setMax(100);	pd.show();	//模拟进度条的加载数据	new Thread(){		public voID run() {			for(int i = 0;i < 100;i++){				pd.setProgress(i);				try {					Thread.sleep(40);				} catch (InterruptedException e) {					e.printstacktrace();				}			}			pd.dismiss();//关闭对话框		};			}.start();}
tween 动画透明度变化
public voID click1(VIEw vIEw) {	// 开始的透明度(0.0f - 1.0f),结束透明度(0.0f - 1.0f)	AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f);	// 完成时间(从透明度到不透明用时)	animation.setDuration(3000);	// 执行次数	animation.setRepeatCount(1);	// 执行模式,REVERSE 反着执行	animation.setRepeatMode(Animation.REVERSE);	// 执行动画	// iv.setAnimation(animation);	iv.startAnimation(animation);}
缩放变化
public voID click2(VIEw vIEw) {	// 水平方向的缩放开始,结束 X	// 垂直方向的缩放开始,结束 Y	// X 坐标的类型(相对于自身relative_TO_SELF),位置0.5 为中心	// Y 坐标的类型(相对于自身relative_TO_SELF),位置0.5 为中心	ScaleAnimation animation = new ScaleAnimation(0.2f, 2.0f, 0.2f, 2.0f,			Animation.relative_TO_SELF, 0.5f, Animation.relative_TO_SELF,			0.5f);	// 完成时间(从透明度到不透明用时)	animation.setDuration(3000);	// 执行次数	animation.setRepeatCount(1);	// 执行模式,REVERSE 反着执行	animation.setRepeatMode(Animation.REVERSE);	// 执行动画	iv.startAnimation(animation);}
旋转变化
public voID click3(VIEw vIEw) {	// 旋转角度开始,结束	// X 坐标的类型(相对于自身relative_TO_SELF),位置0.5 为中心	// Y 坐标的类型(相对于自身relative_TO_SELF),位置0.5 为中心	RotateAnimation animation = new RotateAnimation(0, 360,			Animation.relative_TO_SELF, 0.5f, Animation.relative_TO_SELF,			0.5f);// 相当于以中心旋转360度	// 完成时间(从透明度到不透明用时)	animation.setDuration(3000);	// 执行次数	animation.setRepeatCount(1);	// 执行模式,REVERSE 反着执行	animation.setRepeatMode(Animation.REVERSE);	// 执行动画	iv.startAnimation(animation);}
平移变化
public voID click4(VIEw vIEw) {	// X 坐标的类型(相对于父窗体relative_TO_PARENT), 开始X坐标	// X 坐标的类型(相对于父窗体relative_TO_PARENT), 结束X坐标	// Y 坐标的类型(相对于父窗体relative_TO_PARENT), 开始Y坐标	// Y 坐标的类型(相对于父窗体relative_TO_PARENT), 结束Y坐标	TranslateAnimation animation = new TranslateAnimation(			Animation.relative_TO_SELF, 0.0f, Animation.relative_TO_PARENT,			1.2f, Animation.relative_TO_SELF, 0.0f,			Animation.relative_TO_PARENT, 1.2f);	// 完成时间(从透明度到不透明用时)	animation.setDuration(3000);	// 执行次数	animation.setRepeatCount(1);	// 执行模式,REVERSE 反着执行	animation.setRepeatMode(Animation.REVERSE);	// 执行动画	iv.startAnimation(animation);}
组合变化
public voID click5(VIEw vIEw) {	// 动画播放的速率	AnimationSet animation = new AnimationSet(false);	// 定义动画 -- 平移	TranslateAnimation ta = new TranslateAnimation(			Animation.relative_TO_SELF, 0.0f, Animation.relative_TO_PARENT,			1.2f, Animation.relative_TO_SELF, 0.0f,			Animation.relative_TO_PARENT, 1.2f);	ta.setDuration(3000);	ta.setRepeatCount(1);	// 定义动画 -- 旋转	RotateAnimation ra = new RotateAnimation(0, 360,			Animation.relative_TO_SELF, 0.5f, Animation.relative_TO_SELF,			0.5f);// 相当于以中心旋转360度	ra.setDuration(3000);	ra.setRepeatCount(1);	// 定义动画 -- 缩放	ScaleAnimation sa = new ScaleAnimation(0.2f, 2.0f, 0.2f, 2.0f,			Animation.relative_TO_SELF, 0.5f, Animation.relative_TO_SELF,			0.5f);	sa.setDuration(3000);	sa.setRepeatCount(1);	// 执行模式,REVERSE 反着执行	animation.setRepeatMode(Animation.REVERSE);	// 将动画添加到集合	animation.addAnimation(ta);	animation.addAnimation(ra);	animation.addAnimation(sa);	// 执行动画	iv.startAnimation(animation);}
是让屏幕保持不暗不关闭的最好方法
getwindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
AndroID全屏设置及取消全屏设置
getwindow().setFlags(WindowManager.LayoutParams.FLAG_FulLSCREEN, WindowManager.LayoutParams.FLAG_FulLSCREEN);
AndroID中全屏取消标题栏
requestwindowFeature(Window.FEATURE_NO_Title);
SD卡 路径
Environment.getExternalStorageDirectory()
单行文本跑马灯控件
// 重新写一个 textvIEw 继承 textvIEw 重写 isFocused 方法public class ScrollForeverTextVIEw extends TextVIEw {	public ScrollForeverTextVIEw(Context context) {		super(context);		// Todo auto-generated constructor stub	}	public ScrollForeverTextVIEw(Context context, AttributeSet attrs) {		super(context, attrs);	}	public ScrollForeverTextVIEw(Context context, AttributeSet attrs,			int defStyle) {		super(context, attrs, defStyle);	}	@OverrIDe	public boolean isFocused() {		return true;	}}androID:ellipsize="marquee"//滚动androID:focusable="true"androID:marqueeRepeatlimit="marquee_forever"//循环滚动androID:singleline="true"//一行显示
textVIEw 
mine_forget_password.getPaint().setFlags(Paint.UNDERliNE_TEXT_FLAG);//下划线textVIEw.getPaint().setFlags(Paint. UNDERliNE_TEXT_FLAG ); //下划线textVIEw.getPaint().setAntiAlias(true);//抗锯齿textvIEw.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG); //中划线setFlags(Paint. STRIKE_THRU_TEXT_FLAG|Paint.ANTI_AliAS_FLAG);  // 设置中划线并加清晰 textVIEw.getPaint().setFlags(0);  // 取消设置的的划线
TextVIEw使用HTML
// AndroID TextVIEw使用HTML处理字体样式、显示图片等   textvIEw  HTML 图片 样式final String HTML="<HTML>"			+ "<head>"				+ "<Title>TextVIEw使用HTML</Title>"			+ "</head>"			+ "<body>"				+ "<p><strong>强调</strong></p>"				+ "<p><em>斜体</em></p>"  				+ "<p><a href=\"http://www.dreamdu.com/xhtml/\">超链接HTML入门</a>学习HTML!</p>"				+ "<p><Font color=\"#aabb00\">颜色1</p>"				+ "<p><Font color=\"#00bbaa\">颜色2</p>"				+ "<h1>标题1</h1>"				+ "<h3>标题2</h3>"				+ "<h6>标题3</h6>"				+ "<p>大于>小于</p>"				+ "<p>下面是网络图片</p>"				+ "<img src=\"http://f.hiphotos.bdimg.com/album/w%3D2048/sign=8b216c08ac6eddc426e7b3fb0de3b4fd/0b55b319ebc4b745c67cf5fbcefc1e178b821576.jpg\"/>"				+ "<img src=\"https://avatar.csdn.net/0/3/8/2_zhang957411207.jpg\"/>"			+ "</body>"		+ "</HTML>";  new Thread(new Runnable() {	public voID run() {		spanned = HTML.fromHTML(HTML, imgGetter, null); 		handler.sendEmptyMessage(5);	}}).start();ImageGetter imgGetter = new HTML.ImageGetter() {        public Drawable getDrawable(String source) {        	              Drawable drawable = null;              URL url;                try {                     url = new URL(source);                    drawable = Drawable.createFromStream(url.openStream(), "");  //获取网路图片              } catch (Exception e) {              	  e.printstacktrace();                  return null;                }                drawable.setBounds(0, 0, drawable.getIntrinsicWIDth(), drawable.getIntrinsicHeight());                            return drawable;         }	};bargain_item_004.setText(spanned); 
隐藏键盘
//隐藏键盘((inputMethodManager)getSystemService(input_METHOD_SERVICE)).hIDeSoftinputFromWindow(commoditySearchActivity.this.getCurrentFocus().getwindowToken(), inputMethodManager.HIDE_NOT_ALWAYS);
androID 获取 手机信息
//核心代码:Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getdeviceid();//在manifest.xml文件中要添加 <uses-permission androID:name="androID.permission.READ_PHONE_STATE" />

示例代码

package net.sunniwell.app;     import androID.app.Activity;     import androID.os.Bundle;     import androID.telephony.CellLocation;     import androID.telephony.PhonestateListener;     import androID.telephony.TelephonyManager;     public class TelManager extends Activity {         @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);              /*      * 电话状态:      * 1.tm.CALL_STATE_IDLE=0          无活动      * 2.tm.CALL_STATE_RINGING=1  响铃      * 3.tm.CALL_STATE_OFFHOOK=2  摘机      */      tm.getCallState();//int              /*      * 电话方位:      *       */      tm.getCellLocation();//CellLocation              /*      * 唯一的设备ID:      * GSM手机的 IMEI 和 CDMA手机的 MEID.       * Return null if device ID is not available.      */      tm.getdeviceid();//String              /*      * 设备的软件版本号:      * 例如:the IMEI/SV(software version) for GSM phones.      * Return null if the software version is not available.       */      tm.getDeviceSoftwareversion();//String              /*      * 手机号:      * GSM手机的 MSISDN.      * Return null if it is unavailable.       */      tm.getline1Number();//String              /*      * 附近的电话的信息:      * 类型:List<NeighboringCellinfo>       * 需要权限:androID.Manifest.permission#ACCESS_COARSE_UPDATES      */      tm.getNeighboringCellinfo();//List<NeighboringCellinfo>              /*      * 获取ISO标准的国家码,即国际长途区号。      * 注意:仅当用户已在网络注册后有效。      *       在CDMA网络中结果也许不可靠。      */      tm.getNetworkCountryIso();//String              /*      * MCC+MNC(mobile country code + mobile network code)      * 注意:仅当用户已在网络注册时有效。      *    在CDMA网络中结果也许不可靠。      */      tm.getNetworkOperator();//String              /*      * 按照字母次序的current registered operator(当前已注册的用户)的名字      * 注意:仅当用户已在网络注册时有效。      *    在CDMA网络中结果也许不可靠。      */      tm.getNetworkOperatorname();//String              /*      * 当前使用的网络类型:      * 例如: NETWORK_TYPE_UNKNowN  网络类型未知  0        NETWORK_TYPE_GPRS     GPRS网络  1        NETWORK_TYPE_EDGE     EDGE网络  2        NETWORK_TYPE_umts     umts网络  3        NETWORK_TYPE_HSDPA    HSDPA网络  8         NETWORK_TYPE_HSUPA    HSUPA网络  9        NETWORK_TYPE_HSPA     HSPA网络  10        NETWORK_TYPE_CDMA     CDMA网络,IS95A 或 IS95B.  4        NETWORK_TYPE_EVDO_0   EVDO网络, revision 0.  5        NETWORK_TYPE_EVDO_A   EVDO网络, revision A.  6        NETWORK_TYPE_1xRTT    1xRTT网络  7      */      tm.getNetworkType();//int              /*      * 手机类型:      * 例如: PHONE_TYPE_NONE  无信号        PHONE_TYPE_GSM   GSM信号        PHONE_TYPE_CDMA  CDMA信号      */      tm.getPhoneType();//int              /*      * Returns the ISO country code equivalent for the SIM provIDer's country code.      * 获取ISO国家码,相当于提供SIM卡的国家码。      *       */      tm.getSimCountryIso();//String              /*      * Returns the MCC+MNC (mobile country code + mobile network code) of the provIDer of the SIM. 5 or 6 decimal digits.      * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.      * SIM卡的状态必须是 SIM_STATE_READY(使用getSimstate()判断).      */      tm.getSimOperator();//String              /*      * 服务商名称:      * 例如:中国移动、联通      * SIM卡的状态必须是 SIM_STATE_READY(使用getSimstate()判断).      */      tm.getSimOperatorname();//String              /*      * SIM卡的序列号:      * 需要权限:READ_PHONE_STATE      */      tm.getSimserialNumber();//String              /*      * SIM的状态信息:      *  SIM_STATE_UNKNowN          未知状态 0      SIM_STATE_ABSENT           没插卡 1      SIM_STATE_PIN_required     锁定状态,需要用户的PIN码解锁 2      SIM_STATE_PUK_required     锁定状态,需要用户的PUK码解锁 3      SIM_STATE_NETWORK_LOCKED   锁定状态,需要网络的PIN码解锁 4      SIM_STATE_READY            就绪状态 5      */      tm.getSimstate();//int              /*      * 唯一的用户ID:      * 例如:imsI(国际移动用户识别码) for a GSM phone.      * 需要权限:READ_PHONE_STATE      */      tm.getSubscriberID();//String              /*      * 取得和语音邮件相关的标签,即为识别符      * 需要权限:READ_PHONE_STATE      */      tm.getVoiceMailAlphaTag();//String              /*      * 获取语音邮件号码:      * 需要权限:READ_PHONE_STATE      */      tm.getVoiceMailNumber();//String              /*      * ICC卡是否存在      */      tm.hasIccCard();//boolean              /*      * 是否漫游:      * (在GSM用途下)      */      tm.isNetworkRoaming();//           } }  
SpannableString使用
/** * 超链接 */  private voID addUrlSpan() {      SpannableString spanString = new SpannableString("超链接");      URLSpan span = new URLSpan("tel:0123456789");      spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tv.append(spanString);  }      /** * 文字背景颜色 */  private voID addBackcolorSpan() {      SpannableString spanString = new SpannableString("颜色2");      BackgroundcolorSpan span = new BackgroundcolorSpan(color.YELLOW);      spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tv.append(spanString);  }      /** * 文字颜色 */  private voID addForecolorSpan() {      SpannableString spanString = new SpannableString("颜色1");      ForegroundcolorSpan span = new ForegroundcolorSpan(color.BLUE);      spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tv.append(spanString);  }      /** * 字体大小 */  private voID addFontSpan() {      SpannableString spanString = new SpannableString("36号字体");      absoluteSizeSpan span = new absoluteSizeSpan(36);      spanString.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tv.append(spanString);  }      /** * 粗体,斜体 */  private voID addStyleSpan() {      SpannableString spanString = new SpannableString("BIBI");      StyleSpan span = new StyleSpan(Typeface.BolD_ITAliC);      spanString.setSpan(span, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tv.append(spanString);  }      /** * 删除线 */  private voID addStrikeSpan() {      SpannableString spanString = new SpannableString("删除线");      StrikethroughSpan span = new StrikethroughSpan();      spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tv.append(spanString);  }    /** * 下划线 */  private voID addUnderlinespan() {      SpannableString spanString = new SpannableString("下划线");      Underlinespan span = new Underlinespan();      spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tv.append(spanString);  }        /** * 图片 */  private voID addImageSpan() {      SpannableString spanString = new SpannableString(" ");      Drawable d = getResources().getDrawable(R.drawable.ic_launcher);      d.setBounds(0, 0, d.getIntrinsicWIDth(), d.getIntrinsicHeight());      ImageSpan span = new ImageSpan(d, ImageSpan.AliGN_BASEliNE);      spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);      tv.append(spanString);  }  
textvIEw中某些字段设置点击监听
import androID.app.Activity;import androID.os.Bundle;import androID.text.SpannableString;import androID.text.Spanned;import androID.text.method.linkMovementMethod;import androID.text.style.ClickableSpan;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.linearLayout;import androID.Widget.TextVIEw;import androID.Widget.Toast; public class ClickableText extends Activity {  /** Called when the activity is first created. */  private TextVIEw mClickableText;  @OverrIDe  public voID onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  linearLayout layout = new linearLayout(this);  mClickableText = new TextVIEw(this);  mClickableText.setClickable(true);  mClickableText.setTextSize(20);   layout.addVIEw(mClickableText);  setContentVIEw(layout);  mClickableText.setText(getClickableSpan());  mClickableText.setMovementMethod(linkMovementMethod.getInstance());  }   private SpannableString getClickableSpan()  {  VIEw.OnClickListener l = new VIEw.OnClickListener(){  @OverrIDe  public voID onClick(VIEw v)  {  Toast.makeText(ClickableText.this, "Click Success", Toast.LENGTH_SHORT).show();  }  };   SpannableString spanableInfo = new SpannableString("This is a test, Click Me");  int start = 16;  int end = spanableInfo.length();  spanableInfo.setSpan(new Clickable(l), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  return spanableInfo;  }} class Clickable extends ClickableSpan implements OnClickListener{  private final VIEw.OnClickListener mListener;   public Clickable(VIEw.OnClickListener l){  mListener = l;  }   @OverrIDe  public voID onClick(VIEw v){  mListener.onClick(v);  }}
获取资源 以Stringname获取资源
int sourceID = 0;try {     FIEld fIEld = Class.forname("com.eworld.R$drawable").getFIEld(imagename);     sourceID = fIEld.getInt(fIEld); } catch (Exception e) {     //  ...} 

判断数字,判断字母,判断汉字

String txt = item.getTitle();			Pattern p = Pattern.compile("[0-9]*");			Matcher m = p.matcher(txt);			if (m.matches()) {				LogUtils.i("-----",txt+"->是数字");			}else{				LogUtils.i("-----",txt+"->不是数字");			}//			p = Pattern.compile("[a-zA-Z]");//			m = p.matcher(txt);//			if (m.matches()) {//				Toast.makeText(SystemMessageActivity.this, "输入的是字母", Toast.LENGTH_SHORT).show();//			}//			p = Pattern.compile("[\u4e00-\u9fa5]");//			m = p.matcher(txt);//			if (m.matches()) {//				Toast.makeText(SystemMessageActivity.this, "输入的是汉字", Toast.LENGTH_SHORT).show();//			}

抓取图片地址

/**      * 得到网页中图片的地址 http://image.baIDu.com/      */      public static List<String> getimgSrcList(String HTMLStr) {          List<String> pics = new ArrayList<String>();            String regEx_img = "<img.*?src=\"http://(.*?).jpg\""; // 图片链接地址          Pattern p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);          Matcher m_image = p_image.matcher(HTMLStr);          while (m_image.find()) {              String src = m_image.group(1);              if (src.length() < 100) {                  pics.add("http://" + src + ".jpg");              }          }          return pics;      }  

 

总结

以上是内存溢出为你收集整理的android 笔记全部内容,希望文章能够帮你解决android 笔记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1103009.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存