}
在这个方法中,bgAlpha 是一个float的参数,区间在0.0f - 1.0f。ps:为什么后面加f呢,这涉及到基本类型的默认类型,浮点型默认为double
如果将这个方法写成一个工具类或者在BaseActivity or BaseFragment中调用,直接传俩参数就行
但是,如果,我们在开发过程中一不小心,将第二个参数写成了10f,那么可导致不可预期或者Error的发生
这样,Range就应运而生了
加入Range后的Code:
fun alpUpdate(context: Activity, @FloatRange(from = 0.0, to = 1.0) bgAlpha: Float) {
val lp = context.window.attributes
lp.alpha = bgAlpha //0.0-1.0
context.window.attributes = lp
context.window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
}
一旦传入参数小于或者大于range就会编译错误
先看下FloatRange源码
/*
-
Copyright © 2015 The Android Open Source Project
-
Licensed under the Apache License, Version 2.0 (the “License”);
-
you may not use this file except in compliance with the License.
-
You may obtain a copy of the License at
-
http://www.apache.org/licenses/LICENSE-2.0
-
Unless required by applicable law or agreed to in writing, software
-
distributed under the License is distributed on an “AS IS” BASIS,
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-
See the License for the specific language governing permissions and
-
limitations under the License.
*/
package androidx.annotation;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
-
Denotes that the annotated element should be a float or double in the given range
-
-
Example:
-
-
@FloatRange(from=0.0,to=1.0)
-
public float getAlpha() {
-
...
-
}
*/
@Retention(CLASS)
@Target({METHOD,PARAMETER,FIELD,LOCAL_VARIABLE,ANNOTATION_TYPE})
public @interface FloatRange {
/** Smallest value. Whether it is inclusive or not is determined
- by {@link #fromInclusive} */
double from() default Double.NEGATIVE_INFINITY;
/** Largest value. Whether it is inclusive or not is determined
- by {@link #toInclusive} */
double to() default Double.POSITIVE_INFINITY;
/** Whether the from value is included in the range */
boolean fromInclusive() default true;
/** Whether the to value is included in the range */
boolean toInclusive() default true;
}
可见它是一个注解,可用于方法/参数/字段/局部变量
from 也就是最小值,to是最大值,这两个配合使用就是控制的一个范围
如果只是from 那么就表示最小的值从x 起
Code:
fun floatRange1(@FloatRange(from = 1.0) params : Float){
}
如果只写to 那么就表示当前允许传入的最大值为x
Code:
fun floatRange1(@FloatRange(to = 1.0) params : Float){
}
IntRange 同理
面试复习笔记:
这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
《960页Android开发笔记》
《1307页Android开发面试宝典》
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
《507页Android开发相关源码解析》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
源库。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!