1.UI小课堂java
a.TextView行间距、字间距android
android:lineSpacingExtra
:设置行间距,如10dp。值为正数表示增长行间距,为负数表示减小行间距,为0则没有变化android:lineSpacingMultiplier
设置行间距的倍数,如1.5。值大于1.0表示增长行间距,小于1.0表示减小行间距android:textScaleX
,水平方向放大,至关于把文字拉长;能够经过加空格的方式增长字间距b.EditText有光标不弹出软键盘数组
网上不少方法都很差使,亲测如下方法有用,不只有光标闪烁还不会弹出软键盘。安全
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
try {
Class<EditText> cls = EditText.class;
Method setSoftInputShownOnFocus;
setSoftInputShownOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
setSoftInputShownOnFocus.setAccessible(true);
setSoftInputShownOnFocus.invoke(mEditText, false);
} catch (Exception e) {
e.printStackTrace();
}
复制代码
c.EditText限定输入字符的类型、最大数量bash
EditText.setInputType()
android:inputType
//例如,限定只能输入数字
mEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
//或者,在布局文件添加属性
android:inputType="number"
复制代码
关于输入类型可见文章:EditText输入类型InputType值架构
EditText.setFilters()
android:maxLength
//好比,容许输入的最大字符量为11,等效于android:maxLength="10"
mEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(11)});
复制代码
更多属性可见EditText属性大全详解框架
d.指定Dialog宽高less
Dialog有限制的最大宽高,可能会致使在布局设置的宽高大小失效,这里提升两种解决办法。ide
Dialog.show()
以后WindowManager.LayoutParams params = mDialog.getWindow().getAttributes();
params.width = 840;//单位为px
mDialog.getWindow().setAttributes(params);
复制代码
推荐阅读:源码分析Dialog自定义大小无效函数
//R.style.CustomDialog
<style name="CustomDialog" parent="Theme.AppCompat.Dialog">
<!-- dialog 宽度与屏幕比例-->
<item name="android:windowMinWidthMinor">80%</item>
<!-- dialog 背景颜色,默认是白色-->
<item name="android:colorBackground">@android:color/transparent</item>
</style>
//建立dialog时用有style参数的构造函数
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.CustomDialog);
复制代码
e.资源文件&系统文件
引用资源文件&系统文件有两种方式,一种是在布局文件:
① @type/name
:表示引用自定义的资源
//引用strings资源文件里名为content对应的语句
android:text="@string/content"
复制代码
② @android:type/name
:表示引用系统的public资源
//引用系统资源文件里的颜色black
android:textColor="@android:color/black"
复制代码
③ @*android:type/name
:表示引用系统的全部资源
④ ?
:表示引用主题属性
//引用当前主题资源中名为borderlessButtonStyle的属性值
style="?android:attr/borderlessButtonStyle"
复制代码
⑤ @+
:表示建立或引用资源。若是资源不存在表示建立、若是已存在表示引用。
@+id/资源ID名
:新建一个资源ID@id/资源ID名
:引用已定义的资源ID,包括系统ID@android:id/资源ID名
:引用系统ID,等效于@id/资源ID名
另外一种是在代码中,经过Context.getResources().getXXX(资源ID)
获取相应的资源,并将它做为参数传入相应的setXXX()
方法中从而设置控件的属性。
//设置字体颜色
mTextView.setTextColor(getResources().getColor(R.color.colorPrimary));
//若是R.color.colorPrimary对应颜色是#FF0000,那么等效写法为
mTextView.setTextColor(Color.parseColor("#FF0000"));
复制代码
2.Java基础之泛型&反射
a.泛型
//不使用泛型须要强制转换
List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0)
//使用泛型可避免强制转换
List<String> list = new ArrayList<String>();
list.add("hello");
String s = list.get(0);
复制代码
以上例子也能看到在集合类使用泛型的状况很广泛,并且相比于数组具备动态的特色。
public class 类名<泛型类型1,…>
public <泛型类型1,…> 返回类型 方法名(泛型类型1 参数名1,…)
public interface 接口名<泛型类型1,…>
下面分别举例说明。
//泛型类:把泛型定义在类上
public class ObjectTool<T> {
private T obj;
public T getObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
}
//测试
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectTool<String> ot1 = new ObjectTool<String>();
ot1.setObj(new String("minmin"));
System.out.println("姓名是:" + ot1.getObj()); //姓名是:minmin
ObjectTool<Integer> ot2 = new ObjectTool<Integer>();
ot2.setObj(new Integer(21));
System.out.println("年龄是:" + ot2.getObj()); //年龄是:21
}
}
复制代码
//泛型方法:把泛型定义在方法上
public class ObjectTool {
public <T> T show(T t) {
if (t != null){
return t;
}else{
return null;
}
}
//测试
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectTool ot = new ObjectTool();
System.out.println(ot.show("minmin"));//minmin
System.out.println(ot.show(21));//21
}
}
复制代码
//泛型接口:把泛型定义在接口上
public interface ObjectTool<T,U> {
void show(T t,U u);
}
class ObjectToolTest implements ObjectTool<String,Date> {
@Override
public void show(String str,Date date) {
System.out.print(str);
System.out.print(date);
}
}
//测试
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectToolTest test = new ObjectToolTest();
test.show("Hello",new Date());//Hello当前时间
}
}
复制代码
extends
关键字,限定的是形式参数如
public class ObjectTool<T extends Number>
表示只接受Number类或其子类的参数
?
的边界限定:并配合extends
和super
关键字,限定的是实际参数
List<?>
:等效于List<? extends Object>
List<? extends Number>
:表示不肯定参数类型,但必定是Number类或其子类的类型List<? super Number>
:表示不肯定参数类型,但必定是Number类或其父类的类型如
List<? extends Number> list =new ArrayList<Integer>();
表示建立元素对象都是Integer的List
//擦除前
class Pair<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
//擦除后
class Pair {
private Object value;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
复制代码
//不能用基本类型实例化泛型
Pair<int, char> p = new Pair<>(8, 'a'); // error
Pair<Integer, Character> p = new Pair<>(8, 'a'); // ok
复制代码
//不能用static修饰泛型类型
public class MobileDevice<T> {
private static T os; // error
}
复制代码
//不能对参数化类型使用Casts,除非是无界通配符类型
List<Integer> li = new ArrayList<>();
List<?> list = li; // ok
List<Number> ln = (List<Number>) li; // error
复制代码
//不能对参数化类型使用instanceof,除非是无界通配符类型
public static <E> void rtti(List<E> list) {
if (list instanceof ArrayList<Integer>) { // error
}
if (list instanceof ArrayList<?>) { // OK
}
}
复制代码
//不能建立参数化类型的数组
ArrayList<String>[] arrayOfList = new ArrayList<String>[3]; // error
复制代码
//不能建立、捕捉或抛出参数化类型的对象
class MathException<T> extends Exception {} // error
class QueueFullException<T> extends Throwable {} // error
public static <T extends Exception, J> void execute(List<J> jobs) {
try {
} catch (T e) { // error
}
}
复制代码
//不能重载参数类型为相同原始类型的方法,由于擦除后是同样的
public class Example { // error
public void print(List<String> list) {}
public void print(List<Integer> list) {}
}
复制代码
b.反射
java.lang.Class
:实现反射的基础
Class
对象,并把它保存在同名.class
文件。有关类加载机制java.lang.reflect
中的全部类都没有public
构造方法,只能经过Class类得到这些类的实例.class
:经过类的类型,基本类型可使用Object.getClass()
:经过对象实例,注意基本数据类型没法使用Class.forName()
:经过类的全限定名,注意基本数据类型没法使用Class c1 = Test.class;
Class c2 = test.getClass();// test是Test类的一个对象
Class c3 = Class.forName("com.catchu.me.reflect.Test");
复制代码
更多获取方法见Java反射
java.lang.reflect.Member
:反射操做的对象。提供三个实现类可在运行时改变对象状态:
Constructor
:对应类成员中的构造函数Field
:对应类成员中的变量Method
:对应类成员中的方法在Class提供多种方法能够获取给定类的Constructor、Field和Method,方法以下图:
应用:Java反射彻底解析
3.一点小感悟
也是前几天发现秋招号角已经吹响许久了,然而新一期开发排期比较紧,产品迭代也很快,此次还要独立开发和维护新增的一整块功能,加上实习以来没睡过一天懒觉,周末不是约玩就是去公司,身体也开始抗议,忽然有些焦灼和紧张。
因此写文的进度也只好放慢下来,暂时完结《深刻理解Java虚拟机》的读书笔记板块,也差很少把想看的章节整理完毕,后续闲时再把余下的补全;目前计划就是把以前Retrofit的坑填好,固然这不会是最后一个框架;周记大概不能叫周记了,半月记?月记?可是实习学到的看到的都会在小本本里记好,差很少攒够了就会发出来。
这阵子事业部陆陆续续了开了三次大型会议 ,让我更了解目前新零售在作什么、为何作、要怎么作,清楚整个新零售事业群的组织架构以及咱们闪购事业部的产品服务,还有身为"工程师"而不是"码农"的咱们要有什么样的素质和品质,每次都有格局放大、眼界放宽的成长。
忙碌的工做不时地组团听个技术分享会、抽个晚上团建海底捞、下午再来个水果和可爱多,偶尔来个小插曲放松一下,真的很知足了。
终于等来了美团闪购品牌的发布会,最后为我大闪购打个广告!🔥连接在此:美团闪购:一不当心就把你的生活采购需求都给安排妥了!