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日

相关文章

  • 解析JavaScript中instanceof对于不同的构造器或许都返回true

    解析JavaScript中instanceof对于不同的构造器或许都返回true的攻略 什么是instanceof JavaScript 中的 instanceof 运算符用来检测某个对象是否属于某个类,也可以用来检测某个对象是否是某个类的派生类的实例。instanceof的运算规则如下: object instanceof constructor obje…

    other 2023年6月26日
    00
  • js封装tab标签页实例分享

    让我们开始讲解“js封装tab标签页实例分享”的完整攻略。 什么是Tab标签页? Tab标签页是常见的一种页面展示方式,通常用于多个页面之间进行切换,实现单页应用程序(SPA)或多标签应用程序,可以让用户直观地浏览内容。 如何使用js封装Tab标签页? 以下是一些关键步骤来创建一个可复用的Tab标签页组件: 第一步:HTML 结构 我们需要先在HTML中定义…

    other 2023年6月25日
    00
  • IOS实现自定义布局瀑布流

    下面是iOS实现自定义布局瀑布流的完整攻略: 1. 瀑布流布局简介 瀑布流布局指根据元素高度不同,按照一定的规则排列在网页或app页面上的布局方式,最早出现在Pinterest网站上,可以更好地展示图片等不同高度的元素。在iOS中,可以采用UICollectionView来实现瀑布流布局。 2. 实现瀑布流布局 2.1 UICollectionView自定义…

    other 2023年6月26日
    00
  • win10开机后键盘失灵重启才能使用如何解决 键盘重启后可用的解决方法

    Win10开机后键盘失灵重启才能使用如何解决 如果你在使用Windows 10时发现开机后键盘失灵,重启电脑才能使用,那么这篇文章就是为你准备的。我们将为您提供解决此问题的一些方法。 方法1:修复键盘驱动程序 键盘驱动程序可能在某些情况下被损坏,导致键盘失灵。在这种情况下,你需要尝试修复键盘驱动程序,以恢复键盘的正常工作。 在计算机管理器中打开设备管理器。 …

    other 2023年6月27日
    00
  • 手机软键盘弹出时影响布局的解决方法

    下面就为你详细讲解“手机软键盘弹出时影响布局的解决方法”的完整攻略。 问题描述 在移动端网页或APP的开发中,我们经常会遇到一个问题:当用户点击输入框时,手机软键盘会弹出,此时页面布局会被顶上去,造成用户体验不佳或者页面因此而出现错乱的情况。 那么,我们该如何解决这个问题呢? 解决方案 1. 使用position: fixed属性 在这种解决方案中,我们可以…

    other 2023年6月27日
    00
  • linux crash工具安装配置

    以下是“OpenCV与Qt的环境搭建及Demo的完整攻略”,包括安装配置的步骤、示例说明和注意事项。 Linux Crash工具的概念 Linux Crash工具是一种用于分析Linux系统崩溃的工具,可以帮助用户快速定位系统崩溃的原因。Linux Crash工具可以分析系统的内存转储文件,提供了一系列命令用于查看系统状态、进程信息、内存使用情况等。 Lin…

    other 2023年5月6日
    00
  • DOS未公开的命令与参数

    下面介绍一下如何使用DOS未公开的命令和参数。 什么是DOS未公开的命令和参数 DOS未公开的命令和参数指的是在DOS系统中,虽然未被公开文档所记载,但实际上可以执行的一些命令和参数。它们通常可用于实现一些特殊的功能或调试操作。 这些命令和参数并不受到官方支持,使用时需要注意风险并自担责任。以下是几个常用的DOS未公开的命令和参数,供参考: 命令1:DEBU…

    other 2023年6月26日
    00
  • windowsserver2012安装密钥

    Windows Server 2012安装密钥 Windows Server 2012是一款由微软开发的服务器操作系统,它具有高效性、易用性和稳定性的特点,广泛应用于企业和机构的服务器管理和数据处理。但是,在安装Windows Server 2012的过程中,可能会遇到需要输入安装密钥的情况。本文将介绍如何获取和使用Windows Server 2012的安…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部