Android LayoutInflater原理分析,带你一步步深入了解View(一) ---站在巨人的肩膀上学习总结

Android LayoutInflater原理分析,带你一步步深入了解View(一) —站在巨人的肩膀上学习总结

详情请看,郭林大神博客 http://blog.csdn.net/guolin_blog/article/details/12921889

一:LayoutInflater的基本用法

    //获取到该实例对象
    方法一:LayoutInflater layoutInflater = LayoutInflater.from(context); 
    //获取到该实例对象
    方法二:layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    //该实例对象的inflater()接受参数是:(如此成功创建好了一个布局实例) 
    1,需要加载的布局id 如R.layout.textview_layout(tv的布局)
    2,是否给当前布局嵌套一层父布局,不需要直接写null即可

需求: 如何在mainLayout(主布局中)添加一个tv_layout?

    public class MainActivity extends Activity {  

        private LinearLayout mainLayout;  

        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            mainLayout = (LinearLayout) findViewById(R.id.main_layout);  
            LayoutInflater layoutInflater = LayoutInflater.from(this);  
            View buttonLayout = layoutInflater.inflate(R.layout.button_layout, null);  
            mainLayout.addView(buttonLayout);  
        }  

    }  

    可以看到,这里先是获取到了LayoutInflater的实例,然后调用它的inflate()方法来加载
    button_layout这个布局,最后调用LinearLayout的addView()方法将它添加到LinearLayout中。

%%%总结,%%%
layoutInflater技术广泛的应用在动态的添加View,常常使用的场景如:在ScrollView和ListView中

二:源码角度分析layoutInflater工作原理

    LayoutInflater其实使用的是Android提供的Pull解析XML布局文件的,调用createrViewFromTag()
    把节点名字和参数传进去,(所以,View的创建就是根据节点名字来创建的).该方法的内部会调用
    createView方法通过范式实现对View实例的创建并返回回去,一个布局文件中含有多个view的时候
    会调用rInflater方法循环的遍历,和创建View

三:layout_height和layout_width的理解

    我们经常在xml中使用这两个属性设置View的宽和高,但是有些时候不起作用,对吧?那么是为什么呢?
    因为这两个属性设置的是View相对应上一级也就是父布局的的布局大小,所以View必须有一个父布局,
    最简单的做法就是外出套一个父布局

    那么MainActivity不用套一层父布局还可以控制呢?
    其实MainActivity外出时套了一层,FrameLayout的,这个是系统帮我添加上去的,
    FrameLayout的id是content所以我们调用的setContentView()传入的布局,实质是仿佛FrameLayout中去
    这就是为什么叫setContentView而不是setView.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值