android学习总结(持续记录点点滴滴)
来源:互联网 发布:java项目界面 编辑:程序博客网 时间:2024/05/22 11:51
写在开头
无论是写文章,还是摘录文章,都是一个梳理思维,学习成长的过程,当忘记了还可以回来翻一下,看一看,或者有什么新的想法可以重新编辑一下,方便了自己,也分享了知识,有意的可以一块学习,互相交流。谢谢大家!有错误或者意见还请指出共同进步。
下面是内容列表,有需要的您就看看!!!
- 富文本实现各种字符串拼接,主要为SpannableStringBuilder的使用
- android自定义字体的使用
- android 通知详解
- Android Parcelable和Serializable的区别与使用
富文本实现各种字符串拼接,主要为SpannableStringBuilder的使用
文字后面添加多张图片
SpannableStringBuilder spannableString = new SpannableStringBuilder(); Drawable jing = activity.getResources().getDrawable(R.mipmap.iconjing) ; //拿到图片后修改参数,x:控件在容器X轴上的起点 y:控件在容器Y轴上的起点 width:控件的长度 height:控件的高度 jing.setBounds(0,0,DensityUtil.dip2px(activity,20),DensityUtil.dip2px(activity,20)); Drawable ding = activity.getResources().getDrawable(R.mipmap.iconding) ; ding.setBounds(0,0, DensityUtil.dip2px(activity,20),DensityUtil.dip2px(activity,20)); //在拼接字符串的时候拼接上你图片的点数 spannableString.append(answerListInfo.getName() + " . ."); ImageSpan imageSpan = new ImageSpan(jing); ImageSpan imageSpan1 = new ImageSpan(ding); //创建好ImageSpan对象,替换指定位置上的图片 //Spannable.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点 (a,b) //Spannable.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b] //Spannable.SPAN_INCLUSIVE_EXCLUSIVE --- 包含两端start,但不包含end所在的端点 [a,b) //Spannable.SPAN_INCLUSIVE_INCLUSIVE --- 包含两端start和end所在的端点 [a,b] spannableString.setSpan(imageSpan, spannableString.length() - 3, spannableString.length() - 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); spannableString.setSpan(imageSpan1, spannableString.length() - 1, spannableString.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); view.setText(spannableString);
多个字符串拼接,并单独设置字体类型,大小等等。如图
//第一个字符串 SpannableStringBuilder spannableStringBefore = new SpannableStringBuilder("*"); spannableStringBefore.setSpan(new ForegroundColorSpan(Color.parseColor("#FF0000")), 0, "*".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); //第二哥字符串 SpannableStringBuilder spannableStringMiddle = new SpannableStringBuilder("1.您最擅长的教研领域"); //设置颜色和自定义字体(android使用自定义字体使用请看下面) spannableStringMiddle.setSpan(new ForegroundColorSpan(Color.parseColor("#000000")), 0, "1.您最擅长的教研领域".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableStringMiddle.setSpan(new CustomTypefaceSpan("1.您最擅长的教研领域", typeFace), 0, "1.您最擅长的教研领域".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); //第三个字符串 SpannableStringBuilder spannableStringAfter = new SpannableStringBuilder("[单选]"); //设置颜色和字体大小 spannableStringAfter.setSpan(new AbsoluteSizeSpan(14, true), 0, "[单选]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableStringAfter.setSpan(new ForegroundColorSpan(Color.parseColor("#FFFFFF")), 0, "[单选]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spannableStringBefore.append(spannableStringMiddle).append(spannableStringAfter); tx_title.setText(spannableStringBefore);
推荐几个学习的博客资料
富文本学习传送门:
http://www.jianshu.com/p/05c03e30c849
http://blog.csdn.net/lovexjyong/article/details/17021235
android自定义字体的使用
使用
1.在您的项目的java文件夹下创建文件夹assets -> fonts 把自己的TTF(注意在使用中区分大小写)结尾的自定义字体传进去。2.自定义CustomTypefaceSpan继承TypefaceSpan。
public class CustomTypefaceSpan extends TypefaceSpan { private final Typeface newType; public CustomTypefaceSpan(String family, Typeface type) { super(family); newType = type; } @Override public void updateDrawState(TextPaint ds) { applyCustomTypeFace(ds, newType); } @Override public void updateMeasureState(TextPaint paint) { applyCustomTypeFace(paint, newType); } private static void applyCustomTypeFace(Paint paint, Typeface tf) { int oldStyle; Typeface old = paint.getTypeface(); if (old == null) { oldStyle = 0; } else { oldStyle = old.getStyle(); } int fake = oldStyle & ~tf.getStyle(); if ((fake & Typeface.BOLD) != 0) { paint.setFakeBoldText(true); } if ((fake & Typeface.ITALIC) != 0) { paint.setTextSkewX(-0.25f); } paint.setTypeface(tf); }}
3.使用Typeface typeFace = Typeface.createFromAsset(getAssets(), "fonts/selftext.TTF"); // 应用字体 view.setTypeface(typeFace)
android 通知详解
//添加点击通知要跳转的activity Intent intent = new Intent(MainActivity.this,MainActivity.class); PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0); //获取通知管理者 和 兼容低版本的Notification对象 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //链试编程设置通知属性 Notification build = new NotificationCompat.Builder(MainActivity.this) //设置title和内容 .setContentTitle("这是我们的标题") .setContentText("fdasfdadasfsfadsfadsfasdfdas") //通过设置style的方式可以设置长文本和大图片(再有的机型上无作用,可能跟手机各个厂家rom有关) .setStyle(new NotificationCompat.BigTextStyle().bigText("fdasfdadasfsfadsfadsfasdfdasfadsfadsfadsfaaaaaaaaaaaaaaaaaaaaa")) .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))) //显示通知时间 和 大图标和小图标(有的机型小图标是不显示的) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)) .setContentIntent(activity) //点击后自动消失 .setAutoCancel(true) //设置声音 闪光灯 震动 .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/luna.ogg"))) //震动时长,间隔时长,震动时长,间隔时长… .setVibrate(new long[]{0,1000,1000,1000}) .setLights(Color.GREEN,1000,1000) //一切默认显示 设置了这个上面声音 闪光灯 震动可不用设置 根据手机环境来自动选择 .setDefaults(NotificationCompat.DEFAULT_ALL) .setOngoing(true) .setShowWhen(false) //设置通知上的进度条 .setProgress(100,5,false) //设置优先级HIGH LOW MAX MIN DEFAULT .setPriority(NotificationCompat.PRIORITY_HIGH) .build(); // 1位flag 标记每一条通知 解决多条通知冲突的问题可利用 manager.notify(1,build);
在此值列出了自己的使用,还有好多通知的功能还没有使用到。我学习中看了几个人的博客感觉挺好的,大家一起分享学习!(包含自定义通知,音乐播放等等)
传送门:http://blog.csdn.net/w804518214/article/details/51231946
http://blog.csdn.net/u011200604/article/details/52470770
http://blog.csdn.net/workwwh/article/details/50771492
http://blog.csdn.net/vipzjyno1/article/details/25248021/
Android Parcelable和Serializable的区别与使用
作用:
Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
效率及选择
Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化
实现
对于Serializable,类只需要实现Serializable接口,并提供一个序列化版本id(serialVersionUID)即可。而Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何打包和解包的工作自己来定义,而序列化的这些操作完全由底层实现。
Parcelable的一个实现例子如下
public class Test implements Parcelable { private String name ; public Test() { } //内容描述接口,基本不用管 @Override public int describeContents() { return 0; } //写入接口函数,打包 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.name); } protected Test(Parcel in) { this.name = in.readString(); } //读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入 //为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例 public static final Parcelable.Creator<Test> CREATOR = new Parcelable.Creator<Test>() { @Override public Test createFromParcel(Parcel source) { return new Test(source); } @Override public Test[] newArray(int size) { return new Test[size]; } };}
大家可以到Parcelable的实现是比较麻烦的,在这里推荐一个插件Parcelable code,可以帮你自动实现Parcelable接口。
写在结尾
会一直总结一些项目中用到的知识,不管难易,仅做记录学习!
- android学习总结(持续记录点点滴滴)
- Android 学习记录(持续更新)
- android学习点点滴滴(二)
- 记录学习的点点滴滴
- 记录学习中的点点滴滴
- 记录学习的点点滴滴
- 学习lua的点点滴滴(持续更新中)
- Android学习笔记(持续记录)
- 第一个建立的博客,记录学习android的点点滴滴
- 记录计算机学习的点点滴滴
- 记录自己学习的点点滴滴
- 记录自己学习的点点滴滴
- 以此记录研究生学习点点滴滴
- 记录Android开发的点点滴滴
- android学习点点滴滴
- 使用phpstom的点点滴滴记录,持续更新中...
- 记录研究生点点滴滴(1)
- 开发概念总结(持续记录中...)
- JS的学习路程基础(一)---数据类型,操作符,条件语句
- 小程序之加载动画
- TensorFlow学习笔记(11)--【Ubuntu】slim框架下的inception_v4模型的运行、可视化、导出和使用
- unity mask对图片字体不起作用的解决办法
- Spring框架jar包的最新下载方法
- android学习总结(持续记录点点滴滴)
- icomoon的用途以及怎么用
- Redis 列表命令
- GCD
- 剑指Offer_面试题16_逆置链表
- 使用 Predix UI 组件 开发应用程序
- [RK3288][Android6.0] 调试笔记 --- 设置系统默认显示为竖屏
- 二叉树的序列化
- acticeMq持久化到mysql数据库配置