1.适配7.0 Uri
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
StrictMode.VmPolicy.Builder builder=new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
}
2.初始权限申请和网络请求
3.图片预览功能阶梯:
手势缩放,滑动翻页,旋转,裁剪
缩放定位,压缩
4.64K方法数限制
defaultConfig {
multiDexEnabled true
}
compile 'com.android.support:multidex:1.0.1'
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
5.使用弱引用关闭Activity
6.无标题栏主题样式
7.启用Dagger2-android
8.主项目引用库自定义控件无法提示问题:compileSdkVersion和targetSdkVersion版本号不一致
9.不可滑动的ViewPager
10.高斯模糊
renderscriptTargetApi 19
renderscriptSupportModeEnabled true
compile 'com.github.mmin18:realtimeblurview:1.1.0'
<com.github.mmin18.widget.RealtimeBlurView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:realtimeBlurRadius="20dp"
app:realtimeOverlayColor="#8000" />
11.DataBinding引用资源
12.RecyclerView多条目类型
13.OkHttp下载文件
14.Glide4.0
15.Drawable红鲤鱼动画
16.PopupWindow工具类
17.键盘开启、关闭、关闭监听、键盘顶起界面
18.TextInputLayout右侧鱼眼
19.TextView图标点击事件
20.EditText显示密码可见不可见
etPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
etPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
21.自定义View+DataBinding事件绑定
22.EditText不可编辑可点击:
android:focusable="false" //不可获取焦点
setKeyListener(null);//不弹出键盘
23.FlexboxLayout
24.RxJava异常处理
25.Window设置背景透明度
26.PopupWindow的showAsDropdown的xOff是已ancherView左下角为基础,左移时要加上ancherView宽度
27.父控件抢占EditText焦点:
android:focusable="true"
android:focusableInTouchMode="true"
28.动画3D翻转和NineOldAandroids
29.百度地图
30.相册模块多配置,相机模块
31.自定义Badge,把它动态添加到View的右上角:
计算字数为1时边距大小
32.更好用的BadgeView库,compile 'q.rorbin:badgeview:1.1.2'
33.自定义Drawable:
1.不能单独以标签的形式在xml里使用,必须依附于其他控件
2.无自定义属性
3.无measure
4.专注绘制,比View,ViewGroup轻量
5.继承Drawable,setImageDrawable
34.lib导入arr
35.导入arr版本要求高
36.PopupWindow设置阴影
37.Tab和List框架
38.读取assets文件夹下内容
39.透明Activity
40.Acvity切换动画
starter.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
overridePendingTransition(0, 0);
41.IDE无法提示--->Clean Project
42.App启动:启动耗时,首屏白屏
43.ViewPager:控制滑动翻页,无限轮播,双向轮播,缩放复位,获取当前项
44.AppBarLayout,CollapseLayout,视差效果,折叠头部
45.ScrollView嵌套RecyclerView内容展开
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
46.使用DBFlow存储搜索历史记录
47.软件盘设置搜索建,并监听,防止两次调用
android:imeOptions="actionSearch"
android:singleLine="true"
setOnKeyListener
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
search();
}
48.Retrofit请求参数为对象
49.ScrollView滚打底部
scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部
scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部
50.ScrollView中的EditText设置为被键盘顶起
android:windowSoftInputMode="stateHidden|adjustPan"
51.Retrofit的fullPath,即在接口Sercice中把整个@Path作为参数传入,普通使用会把/进行Url参数编码,无法使用
@FormUrlEncoded
@POST("{fullPath}")
Single<BaseEntity<HomeFirstBean>> homePage(@Path(value = "fullPath", encoded = true) String fullPath)
52.常用转义字符
& --> &
< --> <
53.GridLayoutManager设置等间距分割线
54.自动计算GridLayoutManager分割间距
55.EditText设置自定义输入限制过滤器,如金额首字母不能为零,最多两位小数,setFilters();
56.SpannableString文字大小和颜色,添加图标,图标竖直居中
new ForegroundColorSpan(0xFF999999)
new AbsoluteSizeSpan(12, true)
new CenterVerticalImageSpan(this, R.drawable.public_moredown)
57.TextView判断点击文本位置SpannableString设置ClickableSpan去掉默认下划线,同时设置字体颜色
binding.tvOpenWallet.setMovementMethod(LinkMovementMethod.getInstance());
58.身份证识别->光学识别
59.百度光学识别->身份证识别
60.Databinding的include
61.WebView和js交互,java调用JS函数
62.TextView设置Drawable
Drawable drawable = activity.getResources().getDrawable(R.mipmap.mall_selected_icon);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
tv.setCompoundDrawables(null, null, drawable, null);
63.RecyclerView的GridlayoutManager,的间距问题,右边不留空,不可解决
64.RecyclerView嵌套ScrollView禁止滚动
布局管理器方法
@Override
public boolean canScrollVertically() {
return false;
}
65.DBFlow:同步批量处理,异步批处理,批处理监听
66.聊天列表时间显示隐藏规则
67.ViewPager判断是否可见:
setUserVisibleHint()
68.WheelView-3D
69.RecyclerView添加Footer,并适配瀑布流
70.混淆终于成功,混淆不要看warn日志,从项目的几个方面入手,进行。实在不行采用逐步缩紧的方式进行。
71.引入的.so库支持的cpu类型必须一致,删除一种cpu制式时要删除所有涉及的库和总应用。
72.RxJava使用zip来控制多个并发请求同时响应完成之后再处理界面
73.Android WiFi ADB无限调试
74.Retrofit+RxJava+文件上传进度封装
75.快速定位当前文件所在位置:点击目录栏上方的准星
76.关于系统导航栏:
判断是否有实体键:
boolean hasMenuKey = ViewConfiguration.get(this).hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
获取导航栏高度:
int identifier = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
int height = getResources().getDimensionPixelSize(identifier);
透明导航栏:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
77.TextInputLayout实:EditText获取焦点后就去除提示;未输入提示和已输入提示不同:监听EditText的焦点状态重置连个hint内容
78.RecyclerView实现重叠鱼鳞状:addItemDecoration底部设为负值;Item最外层使用CardView;每一个CardView的CardElevation比上一条目的多一定比值
79.使用Spanny代替SpannableString:ForegroundColorSpan改变字体颜色;AbsoluteSizeSpan改变字体大小;可点击文字并改变文字颜色Clickable extends ClickableSpan;
78.银行卡空格式输入+卡Bin识别:
重新实现AddSpaceTextWatcher的onTextChanged方法
79.ScrollView当总内容没能填满屏幕时,底部内容位于屏幕底部,底部之上有空白填充;当总内容超出屏幕时底部内容位于总内容底部之间无填充;
80.当Activity布局填充完成时的监听回调;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && isFirst) {
isFirst = false;
App.post(new Runnable() {
@Override
public void run() {
//此处获取内容
}
});
}
}
81.键盘输入框的几种交互:
1.整个内容被从底部顶起
2.只有当前输入的EditText被顶起
3.指定控件被顶起
82.自定义Dialog:类似于使用Activity,onCreate(),onBackPress(),setContentView()等
83.页面路由,用于模块间访问,无法获取类名时。
Arouter
84.vlayout设置各个条目类型的缓存
85.WebView页面作为条目内容不要频繁加载
86.TextView动态设置drawLeft,drawRight...
Drawable drawable = context.getResources().getDrawable(R.mipmap.mine_shop_icon);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
tv.setCompoundDrawables(drawable, null, null, null);
87.隐式意图来完善模块化分割(独立功能拆分成库)时的双向调用;Application初始化时给库传入Context;
//在App module的清单中注册
<activity
android:name="com.xjx.demo.home.BActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.demoBActivity.action" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
//在App module中启动
Intent intent = new Intent();
intent.setAction("com.demoBActivity.action");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
88.使用配置文件画竖虚线:
(1)画横向虚线
<shape android:shape="line">
<stroke
android:width="0.5dp"
android:color="@android:color/white"
android:dashGap="5dp"
android:dashWidth="5dp" />
</shape>
//在View上加
android:layerType="software"
//否则为实线
(2)旋转90度
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:toDegrees="90">
<shape android:shape="line">
<stroke
android:width="0.5dp"
android:color="@android:color/white"
android:dashGap="5dp"
android:dashWidth="5dp" />
</shape>
</rotate>
(3)View的宽度设为和目标高度一样,否则旋转后高度等于宽度。多出来的宽度使用负margin
<View
android:layout_width="75dp"
android:layout_height="75dp"
android:layerType="software"
android:layout_marginLeft="-35dp"
android:layout_marginRight="-35dp"
android:background="@drawable/shape_line_dash" />
89.设置ViewPager缓存数量
binding.vpContent.setOffscreenPageLimit(8);
90.Room代替DBFlow:
91.谷歌新架构:
compile "android.arch.lifecycle:runtime:1.0.0"
compile "android.arch.lifecycle:extensions:1.0.0"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0"
92.mac上修改Android Studio新建EmptyActivity时的模板布局:
在as应用程序显示包内容找Contents\plugins\android\lib\templates\activities\common\root\res\layout下,找到simple.xml.ftl文件
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable
name="aty"
type="{packageName}.{activityClass}" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
</layout>
网友评论