一、图文混排
要实现如图所示的效果:
当然可以用ImageView+TextView或者单纯一个TextView,图片显示用drawableLeft来实现。不过,在某些场合,如:文本域中使用上述方法就不现实了,特别是文本要求图文混排这种情况下。在此可以考虑使用SpannableString+ImageSpan来实现:
String icon = "[icon]";
String targetRes = icon + " (" + startValue + " 至 " + endValue + ") ";
SpannableString spannable = new SpannableString(targetRes);
ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM);
spannable.setSpan(span, 0, icon.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
tv_distur_period.setText(spannable);
二、支付
1.微信支付:
WXPayEntryActivity是微信支付结果要回调的Activity。要让此Activity能被正常调用,就必须把它放在package+wxapi包下面,如:com.wei.test.wxapi包下,而且Activity的名字必须为:WXPayEntryActivity。
2.支付宝支付:
新版支付宝的支付sdk集成了h5支付功能。支付时,api会先判断客户端有无安装支付宝客户端,如有,则直接调起客户端app完成支付,如没安装支付宝客户端,则会调起h5网页支付。若要调起网页支付,必须在清单配置文件里配置:
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
activity>
当年因为忽略这个配置,花费了半天时间去查找“为什么客户端能调起并支付成功,而卸载客户端后却无法调起h5支付的问题解决方案”。
三、genymotion模拟器:
AndroidStudio运行时报错:*Unable to create Debug Bridge: Unable to start adb server: error: could not install *smartsocket listener: cannot bind to 127.0.0.1:5037: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)
could not read ok from ADB Server
* failed to start daemon *
error: cannot connect to daemon
‘D:\Java\adt-bundle-windows-x86_64-20140702\sdk\platform-tools\adb.exe,start-server’ failed – run manually if necessary**
解决方法:
是和genymotion冲突了,在genymotion的设置->ADB里面,选择本地的sdk目录就可以了
四、关闭软键盘:
View view = getWindow().peekDecorView();
if (view != null) {
InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
五、Bitmap.Config:
源码中Config的枚举类型:
private static Config sConfigs[] = {
null, ALPHA_8, null, RGB_565, ARGB_4444, ARGB_8888
};
ARGB指的是一种色彩模式,A代表Alpha表示透明度,R(red)表红色,G(green)表绿色,B(blue)表蓝色,其实所有的可见色都是由红绿蓝组成的,所以红绿蓝又称为三原色,每个原色都存储着所表示颜色的信息值
1.ALPHA_8:表示透明度,没有颜色。就是Alpha由8位组成,代表8位 Alpha位图;
2.RGB_565:没有透明度,R=5, G=6, B=5, 即一个像素点占:5 + 6 + 5 = 16位,代表16位RGB位图;
3.ARGB_4444:有透明度,A=4,R=4,G=4,B=4,即一个像素点占: 4 + 4 + 4 + 4 = 16位,代表16位ARGB位图;
4.ARGB_8888:有透明度,A=8,R=8,G=8,B=8,即一个像素点占: 8 + 8 + 8 + 8 = 32位,代表32位ARGB位图.
**位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真。**
一般情况下我们都是使用的ARGB_8888,由此可知它是最占内存的,因为一个像素占32位,8位=1字节,所以一个像素占4字节的内存。假设有一张480x800的图片,如果格式为ARGB_8888,那么将会占用1500KB的内存。
六、CompressFormat JPEG, PNG, WEBP
bitmap.compress(CompressFormat.JPEG, quality, stream);
Android高效压缩图片不失真的方法总结
1.PNG是一种无损压缩方式,compress方法中quality字段的设置是无效的,不同压缩质量下图片大小不变,所以PNG格式的图片只能通过改变图片尺寸进行压缩。
2.压缩质量为50时,三种格式下的图片用肉眼是察看不出什么区别的,即保证了图片不失真。
3.压缩质量为10时,JPEG格式和WEBP格式的图片已经有了较为明显的失真,但JPEG格式的图片失真更为严重。
4.改变图片尺寸对压缩图片效果最佳。
七、ListView控件滚动位置精确保存和恢复的方法
//保存位置:
int position=0;
list.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//保存当前滚动到的位置
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
position = list.getFirstVisiblePosition();//获取在总的列表条数中的索引编号
View firstVisibleItem = list.getChildAt(0);//获取在可视的item中的索引编号
scrolledY = firstVisibleItem.getTop();//获取第一个列表项相对于屏幕顶部的位置
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
//恢复位置:
list.setSelectionFromTop(position, scrolledY);
摘自这里写链接内容