好文档 - 专业文书写作范文服务资料分享网站

Android开发一些重要知识点

天下 分享 时间: 加入收藏 我要投稿 点赞

标记来控制逻辑,当然可以通过线程的挂起等待标志位的改变来通讯,对于某些应用Thread和Handler以及Looper可能更灵活。
229. 230. 231.

21. Android Drawable叠加处理方法

大家可能知道Bitmap的叠加处理在Android平台

中可以通过Canvas一层一层的画就行了,而Drawable中如何处理呢? 除了使用BitmapDrawable的getBitmap方法将Drawable转换为Bitmap外,今天Android123给大家说下好用简单的LayerDrawable类,LayerDrawable顾名思义就是层图形对象。下面直接用一个简单的代码表

示:

Drawable[] array = new Drawable[3]; array[0] = new PaintDra

wable(Color.BLACK); //黑色 233. 234. 235.

array[1] = new PaintDrawable(Color.WHITE); //白色 array[2] = new BitmapDrawable(bm); //位图资源

LayerDrawable ld = new LayerDrawable(array); //参数为上面的

Drawable数组 236.

ld.setLayerInset(1, 1, 1, 1, 1); //第一个参数1代表数组的第二

个元素,为白色 237.

ld.setLayerInset(2, 2, 2, 2, 2); //第一个参数2代表数组的第三

个元素,为位图资源 238. 239.

mImageView.setImageDrawable(ld);


上面的方法中LayerDrawable是关键,Android开发网提示

setLayerInset方法原型为

public void setLayerInset (int index, int l, int t, int r, int b) 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottom。对于简单的图片合成我们可以将第一和第二层的PaintDrawable换成BitmapDrawable即可实现简单的图片合成。
240.

22. onRetainNonConfigurationInstance和

getLastNonConfigurationInstance 241.

很多网友可能知道Android横竖屏切换时会触发

onSaveInstanceState,而还原时会产生onRestoreInstanceState,但是Android的Activity类还有一个方法名为onRetainNonConfigurationInstance和

getLastNonConfigurationInstance这两个方法。 我们可以通过 onRetainNonConfigurationInstance 代替 onSaveInstanceState,比如距离2 242. 243. 244. 245. 246.

//这里需要保存的内容,在切换时不是bundle了,我们可以直接

通过Object来代替 247. 248.

return obj;

} 在恢复窗口时,我们可以不使用 onRestoreInstanceState,而代替

的是 getLastNonConfigurationInstance 方法。我们可以直接在onCreate中使用,比如 Object obj = getLastNonConfigurationInstance(); 最终obj的内容就是上次切换时的内容。 这里Android123提醒大家,每次Activity横竖屏切换时onCreate方法都会被触发。 249. 250. 251. 252.


23. Android中String资源文件的format方法

很多时候我们感性Google在设计Android时遵守

了大量MVC架构方式,可以让写公共代码、美工和具体逻辑开发人员独立出来。有关Android的资源文件values/strings.xml中如何实现格式化字符串呢? 这里Android123举个简单的例子,以及最终可能会用到哪些地方。

253. 254. 255. 256. 257.

     

上面是一段简单的字符串资源文件,没有用到格式化,因为比较简单

直接描述了意思,当我们设计一个类似 Delete xxx File ? 的时候,我们可能需要在Java中动态获取 xxx 的名称,所以定义资源时使用格式化可以轻松解决,不需要一堆String去拼接或StringBuffer一个一个append这样的愚蠢方法,看例

这里%1$s代表这是一个字符串型的,如果是整数型可以写为%1$d,类似printf这样的

格式化字符串函数,当然如果包含了多个需要格式化的内容,则第二个可以写为%2$s或%2$d了,那么最终在Java中如何调用呢? 258.

看下面的例子: 例一: 整数型

定义的是这样的 当然,我们杜绝意外情况,比如冒出个secret这样的string类型的,注意上面是%1$d不是%1$s,所以默认标准的合并成

为 int nAge=23; String sAgeFormat = getResources().getString(R.string.alert); String sFinalAge = String.format(sAgeFormat, 259.

nAge); 这样执行完后,就组成了 I am 23 years old,是不是很方

便啊. 当然了,下面看下String字符串时的情况. 例二: 字符串型的 String sName=\资源定义为 则Java中只需

要 String sInfoFormat = getResources().getString(R.string.alert2); 260.

String sFinalInfo=String.format(sInfoFormat, sName, sCity); 我

们看到了整个,整个定义类似MFC的CString::Format或Mac OS中的NSLog,但是需要显示类似C#中那样显示的标出参数的数字,比如%1或%n,这里数字代表参数的第n个。本行最终sFinalInfo显示的内容为 My name is cwj , I am form Shanghai 。当然了你有什么不懂的地方可以来函至 261.

e=\@163.com
262. 263.

24. Android工程内嵌资源文件的两种方法

Android软件一般处理大的资源通过sdcard比如

在线下载资源到sdcard,而apk中内嵌资源或二进制文件时一般使用下面的两种方法: 方法一 res/raw目录下存放,比如cwj.dat一个二进制文件,我们可以读取可以直

接 InputStream is=context.getResources().openRawResource(R.raw.cwj); 方法二 工程根目录下的assets文件夹中存放,比如assets/cwj.dat 这样我们使用下面的代码 264. 265.

AssetManager am = context.getAssets();

InputStream is = am.open(cwj.dat); 这里Android123提示大家

Google的Android系统处理Assert有个bug,在AssertManager中不能处理单个超过1MB的文件,不然会报异常具体数值大家可以测试下传

个稍大的文件,我们在两年前的文章中有提到,而第一种raw没这个限制可以放个4MB的Mp3文件没问题。
266. 267. 268.

25. Android自定义View以及layout属性全攻略

对于Android系统的自定义View可能大家都熟悉

了,对于自定义View的属性添加,以及Android的Layout的命名空间问题,很多网友还不是很清楚,今天Android123一起再带大家温习一下 CwjView myView=new CwjView(context); 如果用于游戏或整个窗体的界面,我们可能直接在onCreate中setContentView(myView); 当然如果是控件,我们可能会需要从Layout的xml中声明,比

android:layout_width=\ android:layout_height=\ /> 当然,我们也可以直接从父类声明比

android:layout_width=\ android:layout_height=\

/> 上面我们仅用了父类View的两个属性,均来自android命名空

间,而名称为layout_width或layout_height,我们自定义的控件可能有更多的功能,比如

android:layout_width=\ android:layout_height=\ cwj:age=\ cwj:university=\ cwj:city=\ />


我们可以看到上面的三个属性,是我们自定义的。作为标准xml规

范,可能还包含了类

似 xmlns:android=\m/apk/res/android\这样的语句,对于定义完整的View,我们的命名空间为cwj,这里可以写

为 xmlns:cwj=http://schemas.android.com/apk/res/cn.com.android123.cwjView

283. 或 xmlns:cwj=http://schemas.android.co

m/apk/res/android 都可以 对于定义的cwj命名空间和age、university以及city的三个属性我们如何定义呢? 在工程的res/values目录中我们新建一个cwj_attr.xml文件,编码方式为utf-8是一个好习惯,内容如下

    284. 285. 286. 287. 288. 289. 290. 291. 


这里我们可能对format不是很熟悉,目前Android系统内置的格式

类型有integer比如ProgressBar的进度值,float比如RatingBar的值可能是3.5颗星,boolean比如ToggleButton的是否勾选,string比如TextView的text属性,当然除了我们常见的基础类型外,Android的属性还有特殊的比如color是用于颜色属性的,可以识别为#FF0000等类型,当然还有dimension的尺寸类型,比如23dip,15px,18sp的长度单位,还有一种特殊的为reference,一般用于引用@+id/cwj 292.

@drawable/xxx这样的类型。 当然什么时候用reference呢? 我们

就以定义一个颜色为例

子,

super(context, attrs);

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.cwj_attr);

mAge = a.getInteger(R.styleable.CwjView_age, 22); mCity = a.getString(R.styleable.CwjView_city, \

Android开发一些重要知识点

标记来控制逻辑,当然可以通过线程的挂起等待标志位的改变来通讯,对于某些应用Thread和Handler以及Looper可能更灵活。229.230.231.21.AndroidDrawable叠加处理方法大家可能知道Bitmap的叠加处理在Androi
推荐度:
点击下载文档文档为doc格式
7vu119ui479acj39qpyw5s23r4b01m00emg
领取福利

微信扫码领取福利

微信扫码分享