1.DrawerLayout可滑动范围的设置
通过反射mEdgeSize属性实现:
private void setDrawerRange(DrawerLayout drawerLayout) {
Field mDragger = null;
try {
mDragger = drawerLayout.getClass().getDeclaredField("mLeftDragger");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
mDragger.setAccessible(true);
ViewDragHelper draggerObj = null;
try {
draggerObj = (ViewDragHelper) mDragger.get(drawerLayout);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Field mEdgeSize = null;
try {
mEdgeSize = draggerObj.getClass().getDeclaredField("mEdgeSize");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
mEdgeSize.setAccessible(true);
int edge = 0;
try {
edge = mEdgeSize.getInt(draggerObj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
try {
mEdgeSize.setInt(draggerObj, edge * 7);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
2.TextView文字不居中问题:android:includeFontPadding="false"
3.ScrollView嵌套WebView:
ScrollView 加android:descendantFocusability="blocksDescendants"
LinearLayout加tools:ignore="WebViewLayout"
4.UltraViewPager的Adapter封装
5.Vlayout封装
6.日期折叠控件
7.Activity的onRestart()方法,Fragment的onUserVisible()
8.AS快捷键:整行编辑:control + G 多次点击
9.Mac项目移到win10上报错。DataBinding类型的xml文件中存在中文字符,将其替换为R.string.xxxx类型
更好的方法:在环境变量里用户变量添加变量名为: JAVA_TOOL_OPTIONS 变量值为:-Dfile.encoding=UTF-8
10.LocalBroadcastManager应用内广播:
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("11111");
intentFilter.addAction("22222");
intentFilter.addAction("33333");
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
lbm.registerReceiver(broadcastReceiver,intentFilter);
lbm.unregisterReceiver(broadcastReceiver);
11.使用tint着色减少图片数量:
定义图片的select文件,各个状态都是同一张图片;再定义一个color文件各个状态对应不同颜色;将select文件设置到src属性,将color文件设为tint属性;
//home_bm.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/home_bm" android:state_pressed="true" />
<item android:drawable="@mipmap/home_bm" />
</selector>
//color_trans_pink.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#FFCDD2" android:state_pressed="true" />
<item android:color="#00FFCDD2" />
</selector>
//设置到控件中
<ImageView
android:id="@+id/iv_tint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/home_bm"
android:tint="@color/color_trans_pink"/>
优化使用:只要一个图片和一个selector就可以,而且低于21版本不会崩,只是没有点击效果
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@mipmap/home_bm" android:tint="#FFCDD2" />
</item>
<item android:drawable="@mipmap/home_bm" />
</selector>
12.自定属性使用Databinding的lambda表达式:
13.DataBinding集成LiveData关联功能:
classpath 'com.android.tools.build:gradle:3.1.0-alpha08'
14.服务端接口模拟:https://www.mocky.io/ + charles
15.DataBinding用在处Activity/Fragment以外:
ItemMapInfoBinding infoBinding = ItemMapInfoBinding.inflate(getLayoutInflater());
View popupView = infoBinding.getRoot();
16.Android普通动画:平移动画
TranslateAnimation animation = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 1);
animation.setDuration(3000);
animation.setRepeatCount(-1);
binding.ivScanBar.startAnimation(animation);
17.TextView字体sp和高度dp的差值:
dp_sp.png
18.Activity中获取控件高度:
ViewTreeObserver vto2 = view.getViewTreeObserver();
vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
System.out.println("获取控件高度:" + view.getHeight());
}
});
19.DataBinding使用资源的另一种方式:
20.输入缩写生成代码:
0.选择 Live Templates
1.新增一个Live Template
2.名字为finaty
3.内容为:
private static WeakReference<$ACTIVITY$> sActivityRef;
public static void finishActivity() {
if (sActivityRef != null && sActivityRef.get() != null) {
sActivityRef.get().finish();
}
}
sActivityRef = new WeakReference<$ACTIVITY$>(this);
4.define一个context:选择 Java->Declaration
5.Edit variables:ACTIVITY className()
21.摄像头格式和像素格式映射:
NV16 YUV422SP
NV21 YUV420SP
YUY2 YUV422I
YV12 YUV420P
22.实现相机的定点对焦:
Parameters的setFocusAreas()和setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO)一块使用,再autoFocus()启动对焦即可。
对焦区域是横屏坐标从(-1000,-1000)到(1000,1000)
注意竖屏状态下,坐标是和这不一致的要转换。
23.录制短视频功能:
/**
*1. 开启摄像头
- 2.设置对焦
*1. 创建 - 2.重置
- 3.设置参数
- 4.准备
- 5.开始
/
/* - 1.摄像头
- 2.数据源
- 3.编码格式
- 4.输出格式
- 5.输出文件
- 6.视频尺寸
- 7.视频方向
- 8.视频比特率
- 9.设置预览
*/
24.开发者模式下不保留活动,来测试onSavedInstanceState()
25.静态代码分析工具:Analyze Inspect Code
26.Kotlin学习,扩展函数,空类型,默认和命名参数,智能强制类型转换,
27.DiffUtil
28.android软键盘右下角按键设置
默认情况,键盘右下角为Enter键。EditText提供了android:imeOptions属性,控制该文字显示。
A、android:imeOptions="actionSearch" 文字为搜索
B、android:imeOptions="actionGo" 文字为开始
C、android:imeOptions="actionSend" 文字为发送
D、android:imeOptions="actionDone" 文字为Enter键
注意:android:imeOptions起作用,必须加上android:inputType属性或者android:singleLine="true"属性。
监听用户按下该键事件,实现OnEditorActionListener接口,重写onEditorAction()发法,其中第二个参数为软键盘action对应的Id,都在EditorInfo类里,比如actionGo对应EditorInfo.IME_ACTION_GO,之后return true,给editText添加监听器即可。
网友评论