Android知识点2

作者: 面具猴 | 来源:发表于2018-06-11 13:35 被阅读21次

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

    相关文章

      网友评论

        本文标题:Android知识点2

        本文链接:https://www.haomeiwen.com/subject/hrxheftx.html