一些小知识点

1.progressbar的颜色受style文件控制,具体是由主style标签下的colorAccent的颜色决定的

2,integer.valueof()内部调用parseint(),valueof返回的是integer对象,parseint返回的是int数据

3.sdk升级到7.0后,AES加密时用到的secureRandom的实例化有所不同,具体看代码:

public class CryptoProvider extends Provider {
    /**
     * Constructs a provider with the specified name, version number,
     * and information.
     *
       a description of the provider and its services.
     */
    protected CryptoProvider() {
        super("Crypto", 1.0, "HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature)");
        put("SecureRandom.SHA1PRNG","org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl");
        put("SecureRandom.SHA1PRNG ImplementedIn", "Software");
    }
}
 
 
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.N){
    sr = SecureRandom.getInstance("SHA1PRNG",new CryptoProvider());
}else {
    sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
}

4.ViewAnimationUtils,android5.0以后出现的一个类,该类只有一个方法,createCircularRevael(),可以帮助我们实现view变园的操作

5.canvas.drawArc的参数中有一个boolean类型的参数,usecenter,如果设为true,则会画出从圆心开始的两条半径,组成一个扇形,如果为false,则单纯画弧线

6.求出这个point,然后canvas.drawtext的方法中使用这个point的x,y就可以达到文字在自定义控件中居中的显示了

//文字居中的通用方法
private Point getTextPointInView(Paint textPaint, String textDesc, int w, int h) {
    if (null == textDesc) return null;
    Point point = new Point();
    int textW = (w - (int) textPaint.measureText(textDesc)) / 2;
    Paint.FontMetrics fm = textPaint.getFontMetrics();
    int textH = (int) Math.ceil(fm.descent - fm.top);
    point.set(textW, h / 2 + textH / 2 - textH / 4);
    return point;
}

7.关于text的几条线(使用的是xyczero的博客图片)

以baseline为基准,ascent和top都为负,descent和bottom为正,所以,文字的高度一般可以descent-ascent来计算

8,今天在写radiiobutton时,碰到一个问题,在xml里定义好radiobutton,它被包裹在一个背景是白色的LinearLayout里,然后radiobutton的文字死活显示不出来,查了各种原因,都不行,最后发现没有给text设置颜色,跟到源码里,在textview里发现这样一段代码,瞬间明白怎么回事:

如果没有给它设置颜色,默认是白色的,然后又在白色的LinearLayout里,所以就显示不出来了。好尴尬,之前都没注意到

9,include,可以给它设置ID,但是前提是先给他设置width和height,这个在用到visibility时很有用

10,今天发现一个问题,之前一直没有注意。在APP的启动页要做一些判断什么的,我把他们写在了onresume里,然后发现后面的欢迎页面会出现两次,后来想到是因为权限判断的问题,权限弹框的谈起会导致调用多次onresume。。。。。。

11.getMeasureWidth()方法在measure()过程结束后就可以获取到了,而getWidth()方法要在layout()过程结束后才能获取到。getMeasureWidth()方法中的值是通过setMeasuredDimension()方法来进行设置的,而getWidth()方法中的值则是通过layout(left,top,right,bottom)方法设置的。

12.clipdrawable 

<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="horizontal"
    android:drawable="@drawable/pro_sel"
    android:gravity="left" />

可以用来做进度条

13.scroller的两个方法,startscroll,start scrolling by providing a starting point,the distance to travel and the duration of the scroll

fling,start scrolling based on a fling gesture. The distance travelled will depend on the initial velocity of the fling.

startscroll是有起始位置的,而fling,是从初速度开始判断的,没有起始位置

14.在apk升级的时候,

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//判断是否是AndroidN以及更高的版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkfile);
    intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
    intent.setDataAndType(Uri.fromFile(apkfile), "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}

mContext.startActivity(intent);

这个是适配了7.0以后的代码,如果不添加FLAG_ACTIVITY_NEW_TASK,在一些手机上会在下载完安装的时候退出。

15.constraintlayout不支持match_parent,可以使用0dp,然后加上约束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值