美团实习| 周记(五)
本周知识清单如下:ps文末有惊喜链接↓↓↓
- UI小课堂
- TextView行间距、字间距
- EditText有光标不弹出软键盘
- EditText限定输入字符的类型、最大数量
- 指定Dialog宽高
- 资源文件&系统文件
- Java基础之泛型&反射
- 一点小感悟
1.UI小课堂
a.TextView行间距、字间距
- 设置行间距的两个属性:
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限定输入字符的类型、最大数量
- 限定输入字符的类型两种方式
- 在代码中设置
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宽高
Dialog有限制的最大宽高,可能会导致在布局设置的宽高大小失效,这里提高两种解决办法。
- 代码设置,特别注意以下代码一定要在
Dialog.show()
之后
WindowManager.LayoutParams params = mDialog.getWindow().getAttributes();
params.width = 840;//单位为px
mDialog.getWindow().setAttributes(params);
推荐阅读:源码分析Dialog自定义大小无效
- style文件设置
//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.泛型
- 含义:是JDK1.5的新特性,本质是参数化类型,即所操作的数据类型被指定为一个参数,使用时通过传参来指定具体的类型。
- 好处:安全简单。具体体现在提供编译时的强类型检查,而不用等到运行;可避免类类型强制转换;增强代码可读性。
//不使用泛型需要强制转换
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()); //姓名是:minminObjectTool<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"));//minminSystem.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
- 泛型擦除:清除泛型类型参数的相关信息,并且在必要的时候添加类型检查和类型转换的方法。即泛型java代码->普通java代码
//擦除前
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 {} // errorpublic static <T extends Exception, J> void execute(List<J> jobs) {try {} catch (T e) { // error}
}
//不能重载参数类型为相同原始类型的方法,因为擦除后是一样的
public class Example { // errorpublic void print(List<String> list) {}public void print(List<Integer> list) {}
}
b.反射
- 含义:在运行状态中,对于任意一个类都能知道它的所有属性和方法,对于任何一个对象都能够调用它的任何一个方法和属性。
- 功能:动态性
- 在运行时判断任意一个类所具有的属性和方法
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时调用任意一个对象的方法
- 生成动态代理
java.lang.Class
:实现反射的基础- 原因
- JVM每创建一个类都会产生一个对应
Class
对象,并把它保存在同名.class
文件。有关类加载机制 - Java反射包
java.lang.reflect
中的所有类都没有public
构造方法,只能通过Class类获得这些类的实例
- JVM每创建一个类都会产生一个对应
- 获取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的坑填好,当然这不会是最后一个框架;周记大概不能叫周记了,半月记?月记?但是实习学到的看到的都会在小本本里记好,差不多攒够了就会发出来。
这阵子事业部陆陆续续了开了三次大型会议 ,让我更了解目前新零售在做什么、为什么做、要怎么做,清楚整个新零售事业群的组织架构以及我们闪购事业部的产品服务,还有身为"工程师"而不是"码农"的我们要有什么样的素质和品质,每次都有格局放大、眼界放宽的成长。
忙碌的工作不时地组团听个技术分享会、抽个晚上团建海底捞、下午再来个水果和可爱多,偶尔来个小插曲放松一下,真的很满足了。
终于等来了美团闪购品牌的发布会,最后为我大闪购打个广告!?链接在此:美团闪购:一不小心就把你的生活采购需求都给安排妥了!
美团实习| 周记(五)相关推荐
- 美团实习| 周记(三)
本周知识清单如下,ps本周的感悟非常诚恳不容错过哦~ 颜色透明度计算 SpannableString类 快速切换到主线程更新UI的三种方法 RecycleView的item动画 使用Rxjava实现点 ...
- 专硕实践周记计算机软件,计算机实习周记20篇【完整版
<计算机实习周记20篇[完整版>由会员分享,可在线阅读,更多相关<计算机实习周记20篇[完整版(5页珍藏版)>请在人人文库网上搜索. 1.计算机实习周记20篇-WORD文档,下 ...
- 关于计算机应用技术的周记,计算机应用技术专业实习周记范文
计算机应用技术专业实习周记范文 第1周 作为计算机应用技术专业的大学生,我很荣幸能够进入计算机应用技术专业相关的岗位实习.相信每个人都有第一天上班的经历,也会对第一天上班有着深刻的感受及体会.尤其是从 ...
- 周记计算机岗位任务及完成情况,计算机实习周记
很多犹豫计算机实习工作的同学,可以先从别人的计算机实习周记了解一下.今天,学习啦小编为大家带来了计算机实习周记,希望大家喜欢! 计算机实习周记篇1 这周比较忙,自学考试就要来临了,我也要开始复习功课了 ...
- android程序员周记,程序员实习周记100篇
程序员实习周记100篇 有效防止雷同!简单修改即可使用! 姓名:XXX 学号:20190920008 专业:M] 指导老师: 实习时间:20XX-XX-XX-20XX-XX-XX 2019年XX月XX ...
- 免费计算机实习周记word,计算机类实习周记
计算机类实习周记 第二周的工作渐渐的开始步入正轨了,现在也开始做一些事了,很少向 外跑,因为现在才发觉自己对这个城市认识的太少了.好多的路都是不 认识的.现在大部分的时间都是在店里做些事.当什么都不做 ...
- 计算机整理文档的周记,计算机实习周记20篇【完整版】
精品文档 计算机实习周记20篇 ----WORD文档,下载后可编辑修改复制---- 2019年 1 月17 日星期五 实习地点:XXXX 实习主要项目和内容: 这是我实习的第一周,在这一周内因我新来的 ...
- 计算机大学生月记,大学生计算机实习周记4篇
大学生计算机实习周记4篇 不少学校会要要求实习生写实习周记,下面我们来看看大学生计算机实习周记,欢迎阅读借鉴. 大学生计算机实习周记1 实习主要项目和内容: 这是我实习的第一周,在这一周内因我新来的缘 ...
- php毕设周记_2018-2019-php实习周记-实用word文档 (4页)
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为 word 格式,下载后可方便编辑和修改! == php 实习周记 篇一:实习周记 学生毕业实习 ...
最新文章
- mysql排序1 10 11_MySQL中的排序
- alpinestars与丹尼斯_骑行靴|丹尼斯VS A星心得分享,它和普通鞋子不同之处竟在这里!...
- C语言数据类型基本概念
- Markdown简明教程
- Elasticsearch对垒8大竞品技术
- 机器学习实验中的编程技术(part3)--numpy
- 前端开发知识点解答-CSS-面试
- MinIO存储桶通知指南 ​​​​​​​
- datetime的文本时间处理
- 安卓开发仿微信图片拖拽_Android 仿微信朋友圈图片拖拽返回
- 贝叶斯集锦:贝叶斯统计基础
- MySQL federated引擎试验
- python大众点评霸王餐_不收藏肯定后悔!大众点评前员工告诉你,如何利用点评APP吃霸王餐!...
- (转)根据两点经纬度计算距离
- 三种GDB类型的转换后字段类型的变化
- Cplex入门教程(一)
- 通过路由器端口映射实现远程桌面连接
- blender关于怎么导出上完色的FBX格式模型、以及导出后再导入,材质预览和渲染模式下材质透明度混乱的解决办法。
- 20%的美国Z世代每天刷TikTok超过5小时;多特瑞中国首家旗舰店落户上海 | 美通社头条...
- NSGA 和 NSGA-II 学习笔记