android 杂项

1、spannableStringBuilder

主要的基本工具类有android.text.Spanned; android.text.SpannableString; android.text.SpannableStringBuilder;使用这些类来代替常规String。SpannableString和SpannableStringBuilder可以用来设置不同的Span,这些Span便是用于实现Rich Text,比如粗体,斜体,前景色,背景色,字体大小,字体风格等等,android.text.style.*中定义了很多的Span类型可供使用。

创建完Spannable对象后,就可以为它们设置Span来实现想要的Rich Text了,常见的Span有:

AbsoluteSizeSpan(int size) ---- 设置字体大小,参数是绝对数值,相当于Word中的字体大小
RelativeSizeSpan(float proportion) ---- 设置字体大小,参数是相对于默认字体大小的倍数,比如默认字体大小是x, 那么设置后的字体大小就是x*proportion,这个用起来比较灵活,proportion>1就是放大(zoom in), proportion<1就是缩小(zoom out)
ScaleXSpan(float proportion) ---- 缩放字体,与上面的类似,默认为1,设置后就是原来的乘以proportion,大于1时放大(zoon in),小于时缩小(zoom out)
BackgroundColorSpan(int color) ----背景着色,参数是颜色数值,可以直接使用android.graphics.Color里面定义的常量,或是用Color.rgb(int, int, int)
ForegroundColorSpan(int color) ----前景着色,也就是字的着色,参数与背景着色一致
TypefaceSpan(String family) ----字体,参数是字体的名字比如“sans", "sans-serif"等
StyleSpan(Typeface style) -----字体风格,比如粗体,斜体,参数是android.graphics.Typeface里面定义的常量,如Typeface.BOLD,Typeface.ITALIC等等。
StrikethroughSpan----如果设置了此风格,会有一条线从中间穿过所有的字,就像被划掉一样

SpannableString和SpannableStringBuilder都有一个设置上述Span的方法:

    /** 
     * Set the style span to Spannable, such as SpannableString or SpannableStringBuilder 
     * @param what --- the style span, such as StyleSpan 
     * @param start --- the starting index of characters to which the style span to apply 
     * @param end --- the ending index of characters to which the style span to apply 
     * @param flags --- the flag specified to control 
     */  
    setSpan(Object what, int start, int end, int flags);  

其中参数what是要设置的Style span,start和end则是标识String中Span的起始位置,而 flags是用于控制行为的,通常设置为0或Spanned中定义的常量,常用的有:

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点
Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点
Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含两端start,但不包含end所在的端点
Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含两端start和end所在的端点

添加图片主要用SpannableString和ImageSpan类:
Drawable drawable = getResources().getDrawable(id);  
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
//需要处理的文本,[smile]是需要被替代的文本  
SpannableString spannable = new SpannableString(getText().toString()+"[smile]");  
//要让图片替代指定的文字就要用ImageSpan  
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);  
//开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end)  
//最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12  
spannable.setSpan(span, getText().length(),getText().length()+"[smile]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);    
setText(spannable);  

2、生命周期

上面7个生命周期方法分别在4个阶段按着一定的顺序进行调用,这4个阶段如下:
1、开始Activity:在这个阶段依次执行3个生命周期方法:onCreate、onStart和onResume。
2、Activity失去焦点:如果在Activity获得焦点的情况下进入其他的Activity或应用程序,这时当前的Activity会失去焦点。在这一阶段,会依次执行onPause和onStop方法。
3、Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个生命周期方法:onRestart、onStart和onResume。
4、 关闭Activity:当Activity被关闭时系统会依次执行3个生命周期方法:onPause、onStop和onDestroy。

如果在这4个阶段执行生命周期方法的过程中不发生状态的改变,那么系统会按着上面的描述依次执行这4个阶段中的生命周期方法,但如果在执行的过程中改变了状态,系统会按着更复杂的方式调用生命周期方法。

在执行的过程中可以改变系统的执行轨迹的生命周期方法是onPause和onStop。

----------------
android系统会跟着所有运行的activity对象,将这些对象放在一个栈中进行管理。当一个新的activity启动时,处于栈顶的activity会暂停,而这个新的activity会放入到栈顶,当这个新的activity完成时,它将从栈中被移除,先前的activty将回到栈顶。

 

onDestroy:activity生命周期的最后一个方法,当调用finish方法或由于内存原因被系统杀死后会一次调用onPause、onStop、onDestroy方法,来结束activity生命周期;
onStop:当另一个activity被恢复而完全遮住当前activity界面的时候调用;
onPause:当另一个activity被移至栈顶的时候,当前activity会收到被下移的通知,此时调用onPause方法。onPause方法是Activity在后台最后一次能够有机会进行清理工作、释放无需资源的地方。Activity的onPause方法必须要尽快的执行完成,因为前台的Activity必须要等到它执行完成之后返回后才能启动。当前Activity失去焦点只有部分界面可见的时候,也会调用onPause方法;
onStart:当用户对activity可见时调用;
onResume:这里主要用于接收activity数据和进行一些列的初始化操作,当activity到达站顶的时候,即将成为前台进程时,此方法被调用,虽然这一个时刻Activity可能还不为用户所见,但这里是获取资源的最佳场所。
onCreate:Activity启动时调用的第一个方法。在此方法中有一个参数,即Bundle,在首次启动时,这个参数为null,当程序由于内存的原因而被杀掉的时候,如果用户在onSaveInstanceState方法中做了相应的状态保存的操作的话,那个当他再次重新启动的时候,这个Bundle就包含了先前在onSaveInstanceState方法中保存的状态信息,以便Activity回到先前的状态。

可以根据isFinishing方法来判断是用用调用了finish方法而结束Activity还是由于内存原因被系统杀死的。
通过调用finish方法结束的Activity会从Activity栈中弹出,而由于系统内存原因结束的Activity不会从栈中弹出,依然会保留在栈中,因此在用户点击返回按钮的时候,它还是有可能需要在恢复到前天页面的。
为了避免Activity对象被销毁,应该尽可能的在onPause方法中释放尽可能多的资源,那么转入后台时被销毁的可能性就越低。
当Activity由于内存原因被销毁的时候,可以通过使用onSaveInstanceState方法将状态信息保存在一个Bundle对象中,当Activity恢复时此Bundle会做为参数传入到onCreate方法中,以便界面回复到之前的状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值