android-什么时候调用onsizechanged()?

以下是关于“android-什么时候调用onsizechanged()?”的完整攻略:

onSizeChanged()方法

onSizeChanged()是Android View类中的一个方法,用于在View的大小发生变化时被调用。该方法的定义下:

protected void onSizeChanged(int w, int h, int oldw, int oldh)

其中,w和h表示View的新宽度和高度,oldw和oldh表示View的旧宽度和高度。

调用时机

onChanged()方法会在以下情况下被调用:

  1. View一次创建时,即在onCreate()方法之后,但在onDraw()方法之前。
    2 View的大小发生变化时,如旋转屏幕、软键盘弹出等。

示例一:自定义View

以下是一个自定义View的示例,演示了onSizeChanged()方法的调用时机:

public class MyView extends View {
    private Paint mPaint;

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

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

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

    private void init() {
        mPaint = new Paint();
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(getWidth() / 2, getHeight() / 2, Math.min(getWidth(), getHeight()) / 2, mPaint);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        Log.d("MyView", "onSizeChanged: w=" + w + ", h=" + h + ", oldw=" + oldw + ", oldh=" + oldh);
    }
}

以上代码中,自定义了一个View,绘制了一个圆形。在onSizeChanged()方法中,打印了View的新宽度和高度以及旧宽度和高度。

示例二:自定义ViewGroup

以下是一个自定义ViewGroup的示例,演示了onSizeChanged()方法的调用时机:

public class MyViewGroup extends ViewGroup {
    private Paint mPaint;

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

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

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

    private void init() {
        mPaint = new Paint();
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int childCount = getChildCount();
        int left = getPaddingLeft();
        int top = getPaddingTop();
        int right = getMeasuredWidth() - getPaddingRight();
        int bottom = getMeasuredHeight() - getPaddingBottom();
        for (int i = 0; i < childCount; i++) {
            View child = getChildAt(i);
            child.layout(left, top, right, bottom);
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        Log.d("MyViewGroup", "onSizeChanged: w=" + w + ", h=" + h + ", oldw=" + oldw + ", oldh=" + oldh);
    }
}

以上代码中,自定义了一个ViewGroup,绘制了一个矩形。在onSizeChanged()方法中,打印了ViewGroup的新宽度和高度以及旧宽度和高度。

以上就是关于“android-什么时候调用onsizechanged()?”的完整攻略,通过这种方式可以在View或ViewGroup的大小发生变化时进行相应的处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android-什么时候调用onsizechanged()? - Python技术站

(0)
上一篇 2023年5月9日
下一篇 2023年5月9日

相关文章

  • iOS自定义UIDatepicker日期选择器视图分享

    以下是详细的“iOS自定义UIDatepicker日期选择器视图分享”的完整攻略,包括自定义UIDatepicker的基本流程、两个具体示例的详细步骤等。 基本流程 1. 创建新的DatePicker视图 在创建自定义的UIDatePicker之前,需要创建一个新的DatePicker视图。这可以通过自定义UIView类来实现。在该类中,需要重写initWi…

    other 2023年6月25日
    00
  • SQL Server误区30日谈 第3天 即时文件初始化特性可以在SQL Server中开启和关闭

    关于“SQL Server误区30日谈 第3天 即时文件初始化特性可以在SQL Server中开启和关闭”的攻略,我给出以下详细的讲解。 什么是即时文件初始化特性? 即时文件初始化特性指的是在SQL Server中创建数据库文件时,是否需要立即分配物理空间。如果开启即时文件初始化特性,那么创建数据库文件时只会为文件分配头部空间,在执行任何事务之前,并没有预先…

    other 2023年6月20日
    00
  • vue打包后的线上部署Apache、nginx全过程

    下面我将详细讲解“vue打包后的线上部署Apache、nginx全过程”的完整攻略。 如何打包vue项目 首先我们需要先将vue项目进行打包,以下是具体的步骤: 进入到vue项目的根目录下,在终端中执行以下命令: npm run build 执行完上述命令后,会在vue项目根目录下生成一个dist目录,该目录下的所有文件和文件夹就是我们需要部署的静态资源。 …

    other 2023年6月27日
    00
  • 获取App.config配置文件中的参数值

    获取App.config配置文件中的参数值可以通过.NET Framework中的ConfigurationManager类实现。 具体步骤如下: 在项目中添加App.config文件,添加相应的配置项。示例代码如下: <?xml version="1.0" encoding="utf-8" ?> <…

    other 2023年6月25日
    00
  • 发布asp.net core时如何修改ASPNETCORE_ENVIRONMENT环境变量

    发布 ASP.NET Core 应用程序时,可以通过修改 ASPNETCORE_ENVIRONMENT 环境变量来指定应用程序的运行环境。ASPNETCORE_ENVIRONMENT 环境变量是 ASP.NET Core 应用程序惯用的方式来识别应用程序的环境。 环境变量的值可以是任何字符串,通常使用三个主要值:Development、Staging 和 P…

    other 2023年6月27日
    00
  • ASP.NET中 CheckBox复选框控件的使用

    下面是ASP.NET中CheckBox复选框控件的使用的完整攻略: 一、CheckBox复选框控件简介 CheckBox是ASP.NET中常用的控件之一,它用于提供一个带有多个选项的列表。用户可以通过选中或者取消选中的方式选择其中的一项或多项。 二、使用CheckBox控件 1. 基本用法 在ASP.NET页面中添加CheckBox控件,可以通过以下代码实现…

    other 2023年6月27日
    00
  • python接口自动化测试之接口数据依赖的实现方法

    Python接口自动化测试之接口数据依赖的实现方法攻略 在进行接口自动化测试时,有时候一个接口的请求需要依赖于另一个接口的响应数据。这种情况下,我们需要实现接口数据依赖,确保测试用例的执行顺序和数据的正确性。本攻略将详细介绍Python中实现接口数据依赖的方法,并提供两个示例说明。 1. 数据依赖的概念 数据依赖是指一个接口的请求参数或者响应数据依赖于另一个…

    other 2023年7月29日
    00
  • SpringBoot @Scope与@RefreshScope注解使用详解

    SpringBoot @Scope与@RefreshScope注解使用详解 1. @Scope注解 @Scope注解用于指定Spring Bean的作用域。在Spring Boot中,常用的作用域包括Singleton(默认)、Prototype、Request、Session等。 示例说明1:指定作用域为Prototype @Component @Scop…

    other 2023年10月15日
    00
合作推广
合作推广
分享本页
返回顶部