• DecorView和android.R.id.content的关系


    起因

    最近在看android开发framkwork的教程。开发了个类似jquery那样链式调用的导航条。它的使用方式是这样的

    1. DefaultNavigationBar defaultNavigationBar=new DefaultNavigationBar.Builder(this,findViewById(R.id.view_group))
    2. .setTitle("标题")
    3. .setRightTitle("右边")
    4. .setRightOnclickLister(new View.OnClickListener() {
    5. @Override
    6. public void onClick(View view) {
    7. Toast.makeText(context,"点击右侧文字",Toast.LENGTH_LONG).show();
    8. }
    9. })
    10. .builder();

    疑问

    R.id.view_group这个是acitivty xml布局里面最外层的标签。我就在考虑个问题,能不能把这俩部分的功能移除。

    • 在xml最外层标签加id
    • Builder函数能不能把这个id移除,默认就放到acitivity关联的xml布局的根标签的第一个元素上面去。

    搜索

    可是这我也不知道咋搞啊,那百度吧,谷歌吧,

    结果搜到了以下三个结果

    1. (ViewGroup)findViewById(android.R.id.content);
    2. (ViewGroup) findViewById(android.R.id.content)).getChildAt(0) //会报错Cannot resolve method 'getChildAt' in 'View
    3. getWindow().getDecorView();  获取当前Activity的根视图

    第一个和第二个的关系还好理解,第二个就是获取第一个的第一个字节点嘛

    那第一个和第三个啥关系

    带着这个疑问,又去谷歌和百度。。。面向搜索引擎编程haha~~

    先说结论:

    android.R.id.content是个帧布局,能够直接往我们的android.R.id.content主布局添加东西了啊。

    acitivity里面的setContentView()就就是往这里面塞东西

    这么理解的话

    findViewById(android.R.id.content)).getChildAt(0) 得到的就是我们acitivity对应layout布局里面的最外层元素

    话题有点偏了,第一个和第三个到底什么关系?也是包含的关系?

    没错~

    getDecorView:这个方法是获取顶级视图,DecorView为整个Window界面的最顶层View, 里面是包含了我们的android.R.id.content的,而且也是个帧布局哦。我们甚至也能addView。

    本来我还想贴下android源码的,无奈AppCompatActivity的源码已经不像17年时候那个版本的那么简洁了,为了兼容加了好多我看不懂的东西。那就贴下别人的笔记吧。

    接下来的节目交给?!!!!

    一定要看一下,虽然是老代码,但是思路很清晰,还一步步的解答。例如导航条和acitivity的布局的关系,也说的很清楚

    What is DecorView and android.R.id.content? - 简书

    突然遇到我心心念念的PopupWindow,临时记录一下

    https://www.runoob.com/w3cnote/android-tutorial-popupwindow.html

    为啥这个jpg可以动呢?知道的童鞋,告诉我下,实在是不懂

    点击它浏览器打开

  • 相关阅读:
    Hadoop -HDFS常用操作指令
    Vue3最佳实践 第七章 TypeScript 中
    CVPR2022Oral专题系列(三):图像增强主干网络MAXIM
    LightGBM高级教程:深度集成与迁移学习
    JAVA:实现TowerOfHanoi汉诺塔算法(附完整源码)
    【剑指 Offer 54. 二叉搜索树的第k大节点】
    Segmentation fault 的bug解决
    C++语言基础篇(二)
    Spring注解之@ExceptionHandler 统一异常处理和获取方法名
    全世界IT人苦竞业久矣!美国FTC宣布全面废除员工竞业协议
  • 原文地址:https://blog.csdn.net/u014071104/article/details/127725557