Android常用技巧总结

一、图文混排
要实现如图所示的效果:这里写图片描述
当然可以用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);

摘自这里写链接内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值