Android学习笔记

Posted Kapo1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android学习笔记相关的知识,希望对你有一定的参考价值。

AS中的快捷键

  1. Alt + Enter:快捷修复
  2. Ctrl + h:可以快速查看某个类的继承关系
  3. Ctrl + 左键:可以列出所有的定义的构造方法
  4. Alt + Insert或在类里右击选择Generate:快速调出Generate,选择Getters and Setters,选择要为哪一个属性创建即可快速创建getter和setter方法
  5. Alt + Insert或在类里右击选择Generate:快速调出Generate,选择Constructor,选择要为哪一个属性创建即可快速创建包含选择参数的构造方法。选择Select None是无参构造方法

易错点

  1. 设置控件的相对位置一定要和父容器的方向不同才可以,例如父容器的方向为水平,那么该控件设置向右或者向左都不会有作用,只有设置向上或者向下有作用。

  2. 因为findViewById方法使用了泛型,所以不需要使用强制类型转换

  3. 单位一般使用dp,文字大小的单位建议使用sp

  4. android.widget包下的东西,在使用的时候不需要加包名。其他包里的控件,在使用的时候需要在前面加包名。

  5. 在哪个地方加载了布局文件,就在哪个地方获取这个布局文件中控件的引用

  6. setTextColor不能直接传入Color资源的id号,需要用getResources().getColor()方法

  7. android:background="@android:color/transparent"用来设置背景颜色透明

  8. CharSequence是一个接口,通常传这个类型的值的时候,传一个字符串即String

  9. 在styles资源文件中,可以修改主题来让,整个应用程序的ActionBar即标题栏是否显示,然后可以用ToolBar来显示标题栏

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pkVA4CQL-1622193877874)(android学习笔记.assets/image-20210119123411181.png)]

    1. NoActionBar:去掉默认的标题栏
    2. DarkActionBar:带有标题栏
  10. 主线程中不允许执行耗时操作

  11. 子线程不允许修改UI,在一些执行时间很短的子线程可能可以实现修改,但是仍然不推荐

  12. start方法只是启动子线程,但是线程执行时间随机

  13. 子线程的消息队列需要手动调用Looper.prepare()方法初始化,手动调用Looper.loop()方法让他循环消息队列

  14. 在回调方法处理事件dispatch这样的方法里

    1. 返回值是false,不分发事件,事件有上一级的ViewGroup或者由Activity进行处理
    2. 返回值是true,表示继续向下分发事件
  15. 在回调方法处理事件on…Event这样的方法里

    1. false:事件回溯(会调用上一级ViewGroup的事件响应方法)
    2. true:事件不回溯(当前控件已经将事件处理完成)
  16. mipmap中的图片可以自适应大小

  17. 1.设置item的行间距:
    可以在xml布局文件中的listView下设置xml属性:
    android:divider="#00000000"
    android:dividerHeight=“18dp”
    解释:分隔线透明,高度为18dp。

    2.去掉item之间的分割线:
    每个item之间都有分割线,如果单纯想去掉分割线,方法还是很多的:
    法1:设置android:divider="@null"
    法2:android:divider="@00000000" 后两个0标识透明
    法3:setDividerHeight(0);高度设为0

  18. 防止ListView多次加载的方法

    1. ViewHolder
  19. 我们现在使用的PopupMenu是androidx包下的

  20. 监听器里加环境上下文时,this前要加类名. 即类名.this

  21. Activity中环境上下文用this,其他用getContext();

  22. DialogFragment设置内部背景透明:在onCreateView中加一句

    // 设置背景透明
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    
  23. ActionBar用androidx包下的

  24. 隐藏标题栏的方法

    // MainActivity类中
    ActionBar bar = getSupportActionBar();
    bar.hide();
    
  25. ToolBar比ActionBar更灵活,ToolBar在androidx包下

  26. onClick按下和抬起算一次点击,onTouch按下就算已经触摸

  27. 申请访问网络权限,在AndroidManifest.xml中,application上面添加

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    
  28. api30在通过Thread+Handler在子线程中获取网络图片,通过主线程显示时,无法显示的的问题,在AndroidManifest.xml中,application中添加

    android:usesCleartextTraffic="true"
    
  29. 在主线程中创建Hadnler时,最好使用构造方法中传入Looper.getMainLooper()参数

  30. 通过EditText的addTextChangedListener方法可以实现搜索框自动根据搜索框内容搜索功能

  31. 在使用ListView中的Divider时,如果出现最后一个元素的下面出现分割线,可以尝试通过修改ListView的高度为wrap_content,原因是当ListView高度是不算最后一项divider的,所以只有在match_parent的情况下,ListView的高度是有余的,才能画出最后的那个divider

  32. 设置状态栏颜色和状态栏字体颜色的方法:https://zoyi14.smartapps.cn/pages/note/index?slug=932568ed31af&origin=share&hostname=baiduboxapp&_swebfr=1

  33. 设置集合内的元素倒序:Collections.reverse(xxx);

  34. 在安卓中,只有垂直的Linearlayout属性里面的内部组件靠左靠右才有效,同理, 水平的linearlayout属性里面的内部组件靠上靠下才有效。

    通过android:gravity来设置对齐方式

    如果想要强行改变,例如垂直的Linearlayout属性里面的内部组件考上靠下,水平的linearlayout属性里面的内部组件靠左靠右,需要添加android:layout_width=“fill_parent”

  35. 多个Fragment之间切换的方法

    1. add方法,可以保存之前Fragment的状态

      Fragment meFragment = new MeFragment();
      Fragment orderFragment = new OrderFragment();
      FragmentTransaction transaction = getFragmentManager().beginTransaction();
      transaction.addToBackStack(null);
      // 先判断是否被add过
      if (!orderFragment.isAdded()) {
      // 隐藏当前的fragment,add下一个到Activity中
      transaction.hide(meFragment).add(android.R.id.tabhost, orderFragment, "order").commit();
      } else {
      // 隐藏当前的fragment,显示下一个
      transaction.hide(meFragment).show(orderFragment).commit();
      }
      
    2. replace方法,重新加载Fragment

      Fragment meFragment = new MeFragment();
      Fragment orderFragment = new OrderFragment();
      FragmentTransaction transaction = getFragmentManager().beginTransaction();
      transaction.addToBackStack(null);
      // 先判断是否被add过
      if (!orderFragment.isAdded()) {
      // 隐藏当前的fragment,add下一个到Activity中
      transaction.hide(meFragment).replace(android.R.id.tabhost, orderFragment, "order").commit();
      } else {
      // 隐藏当前的fragment,显示下一个
      transaction.hide(meFragment).show(orderFragment).commit();
      }
      
  36. 切换Fragment出现重叠问题:

    1. 在切换到的Fragement的布局文件中加入android:background="#ffffff"
      为了不让点击第二个fragment的某些地方,触发第一个fragment里的控件事件,需要在第二个fragment的FrameLayout里加上:android:clickable=“true”
  37. 主界面使用FragmentTabHost,在针对某个控件的点击,弹出Fragment时,出现点击控件后出现,切换tab,页面重叠问题:

    1. 在含有该控件的页面的java类中,加入transaction.addToBackStack(null);即将含有该控件的Fragment加入回退栈中。在点击控件跳转的Fragment中,加入getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);即将前一入栈的Fragment,使其出栈。

      通过上述操作可以实现按物理键回退不出现重叠,若想在切换到的Fragment中按某个控件回退不出现重叠,需要绑定该控件的监听器,实现getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

  38. 实现通过物理键回退Fragment的方法

    1. 在含有该控件的页面的java类中,加入transaction.addToBackStack(null);即将含有该控件的Fragment加入回退栈中。在点击控件跳转的Fragment中,加入getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);即将前一入栈的Fragment,使其出栈。
  39. AsyncTask中的三个泛型

    1. 第一个是doInBackground()中参数的类型,
    2. 第二个是onProgressUpdate()中参数的类型,一般类型用Integer用于显示进度条的进度。
    3. 第三个是onPostExecute()中参数的类型,如果是异步下载图片则可以是Bitmap,但一般是json字符串,所以用String比较多。
  40. 在实现android和java服务器通信时,如果遇到打开模拟器不能通信的情况,可以换成真机

    1. 电脑开热点,手机连热点,android客户端连接服务器端的url的ip地址要写无线局域网适配器 本地连接* 10对应的
    2. 手机开热点,电脑连热点
  41. 关于Activity跳转另一个Activity指定的fragment的解决方法

    1. 遇到的情况:在一个Activity中点击某个跳转事件到主界面底部某个指定的Fragment中。
      点击事件所在的activity代码:

      Intent intent = new Intent(ReAddCustomActivity.this, MainActivity.class);
      intent.putExtra("flag", 2);
      startActivity(intent);
      ReAddCustomActivity.this.finish();
      

      跳转到的activity的代码:

      Intent intent = getIntent();
      int id = intent.getIntExtra("flag", 0);
      if (id > 0) {
          //fragment的切换采用的是viewpage的形式,然后1是指底部第2个Fragment
          viewpager.setCurrentItem(1);
      }
      
  42. fragment怎样跳转到另一个activity中

    1. 对activity之间的跳转进行一点修改

      Context context = getActivity();
      Intent intent = new Intent(context ,目标Activity.class);
      调用startActivity(intent);即可转跳到指定的Activity

  43. 在主界面的onCreate方法里调用intent方法会让其他任何子页面返回时,都返回到之前主界面的onCreate方法的目的页面

    1. 使用finish()结束子页面
  44. jcenter()第三方的库,例如其他人分享的界面, 可以通过jcenter()获取依赖,jcenter()现被弃用

  45. 商品列表页到商品详情页,数据传递:

    1. 在商品列表页请求完了之后,通过页面跳转携带数据传递给详情页
    2. 在商品列表页请求一部分需要的,在详情页请求另外需要的(推荐),要多写一个servlet
  46. 结束当前的activity,默认回到之前的activity。finish()

  47. 压缩之前先,Buid->clean

  48. 如果出现连接真机无法打印日志的情况,可能是因为真机的配置有问题

以上是关于Android学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

如何从Android中的片段单击按钮打开片段

Android内核源码bionic目录下的子目录arch-arm源码分析笔记

DOM探索之基础详解——学习笔记

Android源代码学习笔记:AndroidResideMenu-master

Android学习笔记(十四)——在执行时加入碎片(附源代码)