Android知识点2

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

    
    

//color_trans_pink.xml

    
    

//设置到控件中

优化使用:只要一个图片和一个selector就可以,而且低于21版本不会崩,只是没有点击效果

    
        
    
    

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添加监听器即可。

你可能感兴趣的:(Android知识点2)