• 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可以动呢?知道的童鞋,告诉我下,实在是不懂

    点击它浏览器打开

  • 相关阅读:
    http在安卓9.0以上版本无法获取数据问题(备忘)
    【Python大数据笔记_day11_Hadoop进阶之MR和YARN&ZooKeeper】
    前端提高代码质量-提升代码的可维护性
    程序的环境
    HFI-脉振法
    20个提升效率的JS简写技巧,告别屎山!
    第三章《数组与循环》第8节:数组与循环经典例题
    WIN10 NPM的安装
    深度学习 - Transformer 组成详解
    Linux 命令(190)—— skill 命令
  • 原文地址:https://blog.csdn.net/u014071104/article/details/127725557