千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > onfinishinflate详解

onfinishinflate详解

来源:千锋教育
发布人:xqq
时间: 2023-11-25 13:01:00 1700888460

在Android开发中,布局文件的加载是一个关键的过程。在布局加载完成之后,我们有时候需要进行某些操作,比如对某个控件进行赋值,绑定监听器等。onfinishinflate()方法就是在布局文件加载完成之后,在所有控件绑定之前被调用。下面就从多个方面详细介绍onfinishinflate()方法。

一、onfinishinflate()方法的调用时机

onfinishinflate()方法在布局文件加载完成后,且在所有控件绑定之前被调用。具体调用时机如下:


@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    // 在此处可以对控件进行操作
}

当布局文件加载完成后,系统会自动调用onFinishInflate()方法。我们需要在此方法中对控件进行操作。

二、onfinishinflate()方法的作用

onfinishinflate()方法在布局文件加载后,控件绑定之前被调用。可以通过这个方法来获取布局文件中的控件,对控件进行一些操作,如:设置属性、设置事件监听等。这样做的好处在于,不仅不需要等待布局文件中的所有控件都生成,而且可以避免对控件进行重复的findViewById操作。

三、onfinishinflate()方法的使用场景

1. 加载自定义控件时使用


public class MyView extends View {

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.layout_myview, this, true);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        // 对自定义控件布局中的控件进行操作
        Button btn = findViewById(R.id.btn_myview);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO: 实现点击事件逻辑
            }
        });
    }
}

在自定义控件中,我们可以通过onfinishinflate()方法来获取自定义控件的布局文件中的控件,并对控件进行操作。

2. 给控件设置默认值


public class CustomTextView extends androidx.appcompat.widget.AppCompatTextView {

    public CustomTextView(Context context) {
        super(context);
        init();
    }

    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        LayoutInflater.from(getContext()).inflate(R.layout.layout_custom_textview, this, true);
        setTextSize(16);
        setTextColor(Color.BLUE);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();

        TypedArray ta = getContext().obtainStyledAttributes(getTextColors());
        int textColor = ta.getColor(0, Color.BLUE);
        ta.recycle();

        setTextSize(getTextSize());
        setTextColor(textColor);
    }
}

这个例子中,我们自定义了一个TextView,并且给TextView设置了默认的字体大小和字体颜色。在onfinishinflate()方法中,我们可以获取TextView的原始字体大小和字体颜色,并使用我们自定义的默认值进行覆盖。

3. 给控件绑定事件监听器


public class CustomButton extends androidx.appcompat.widget.AppCompatButton {

    public CustomButton(Context context) {
        super(context);
        init();
    }

    public CustomButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        LayoutInflater.from(getContext()).inflate(R.layout.layout_custom_button, this, true);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();

        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO: 实现点击事件逻辑
            }
        });
    }
}

在这个例子中,我们自定义了一个Button,并在onfinishinflate()方法中给它绑定了一个点击事件监听器。这样,在Button控件的所有属性设置完毕后,就可以立即给它添加事件监听器。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT