广告
返回顶部
首页 > 资讯 > 移动开发 >Android View如何测量
  • 368
分享到

Android View如何测量

viewAndroid 2022-06-06 08:06:41 368人浏览 薄情痞子
摘要

        对于Android View的测量,我们一句话总结为:"给我位置和大小,我就知道您长到那里

        对于Android View的测量,我们一句话总结为:"给我位置和大小,我就知道您长到那里"。

  为了让大家更好的理解这个结论,我这里先讲一个日常生活中的小故事:不知道大家玩过"瞎子画画"的游戏没,一个人蒙上眼睛,拿笔去画板上画一些指定的图案,另外一个人则充当他的"眼睛",通过语言告诉他在画板那个位置画一个多大的图案。倘若,这个人不告诉那个蒙着眼睛的人,在那个画一个多大的图案。那么这个蒙着眼睛的人此时真是"河里赶大车----------没辙"。其实,Android就是这个蒙着眼睛的人,我们必须精确地告诉他如何去画,它才能画出你所想要的图形。

  大家是不是对Android布局的测量进行现实世界进行类比了。为了实现View具体布局在哪儿,Android设计了一个短小精悍又功能强大的类——measureSpec类。这样妈妈再也不用担心我不会测量View了。那么,MeasureSpec到底是个什么鬼了。MeasureSpec,归根结底是一个32位的int值。其中高2位表示测量的模式,低30位表示测量View的大小。这样做有什么好处。这样做通过位运算来提高运行效率。

  要了解MeasureSpec这个类的来弄去脉的话,务必要对测量的三种模式了解。

  1.EXACTLY(精准的)

  当您设置View的layout_height属性或layout_width属性为确定的值或者为match_parent(填充父容器)时候,系统就将View测量模式设置为EXACTLY模式。

  2.AT_MOST(最大值)

  即布局为最大值模式,那么什么时候系统会将View调整为AT_MOST模式了,即当您设置View的layout_height属性或layout_width属性为wrap_content(包裹内容)时候。

  3.UNSPECIFIED(未确定)

  即没有确定,没有指定大小测量模式,view即“心有多大,舞台就有多大"。这个方法,一般在自定义控件中才能用到。

  View测量的时候,默认是EXACTLY模式,也许你会感到纳闷,TextView,EditText这些控件,他怎么就支持wrap_content属性了,难道他重写OnMeasure方法,是的,他们都重写OnMeasure方法。这就是为什么我们在自定义控件的时候,如果要布局支持wrap_content属性,就需要重写onMeasure方法,来指定wrap_content为确切的大小。

  这个关于测量模式的思维导图应该是这样的:

  

  我们知道这么多理论的知识,是不是觉得即枯燥乏味又觉得然并卵。好吧,我们就直接上代码,在代码中解释MeasureSpec如何获取测量模式和测量的大小。源代码如下:

   Java代码如下:


public class MyView extends View {
  public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }
}

xml代码如下:


<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context=".MainActivity" >
    <com.example.test.MyView 
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:background="#00ff00"
      />
</LinearLayout>

运行效果如下所示:

  通过这个短小精悍的例子,充分证明这样一个结论:View测量的时候,默认是EXACTLY模式,你不重写OnMeasure方法,即使设置wrap_content属性,他也是填充父容器。

  那么,就通过MeasureSpec这个万金油类来重写一下OnMeasure方法。相应源代码如下:


  public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(measureWidth(widthMeasureSpec),
        measureWidth(heightMeasureSpec));
  }
  public int measureWidth(int measureSpec) {
    int result = 0;
    int specMode = MeasureSpec.getMode(measureSpec);
    int specSize = MeasureSpec.getSize(measureSpec);
    if (specMode == MeasureSpec.EXACTLY) {
      result = specSize;
    } else {
      result = 200;
      if (specMode == MeasureSpec.AT_MOST) {
        result = Math.min(specSize, result);
      }
    }
    return result;
  }

运行效果如下:

  同样的例子,我们只不过是重写了OnMeasure方法,通过MeasureSpec.getMode(measureSpec)获取测量模式的时候,通过MeasureSpec.getSize(measureSpec)获取控件尺寸。判断当布局属性为wrap_content,指定为一确切值,这时,控件就符合wrap_content属性。

您可能感兴趣的文章:Android测量每秒帧数Frames Per Second (FPS)的方法Android视图的绘制流程(上) View的测量Android View 测量流程(Measure)全面解析Android精确测量文本宽高及基线位置的方法


--结束END--

本文标题: Android View如何测量

本文链接: https://www.lsjlt.com/news/25409.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android View如何测量
            对于Android View的测量,我们一句话总结为:"给我位置和大小,我就知道您长到那里...
    99+
    2022-06-06
    view Android
  • Android View 测量流程(Measure)全面解析
    前言 上一篇文章,笔者主要讲述了DecorView以及ViewRootImpl相关的作用,这里回顾一下上一章所说的内容:DecorView是视图的顶级View,我们添加的布局文...
    99+
    2022-06-06
    view Android
  • Android视图的绘制流程(上) View的测量
    综述   View的绘制流程可以分为三大步,它们分别是measure,layout和draw过程。measure表示View的测量过程,用于测量View的宽度和高度;layou...
    99+
    2022-06-06
    view Android
  • Android自定义View实践 空气质量检测 pm2.5
    直接先看效果图 自定义气体检测视图我们先整理下需要做的的事情 画五个圆弧 每个圆弧上再通过具体的数据绘制一定角度的圆弧 甲醛那个进度条比较特殊...
    99+
    2022-06-06
    view pm2 Android
  • Android View如何绘制
    上文说道了Android如何测量,但是一个漂亮的控件我只知道您长到哪儿,这当然不行。只需要简单重写OnDraw方法,并在Canvas(画布)对象上调用那根五颜六色的画笔就能够画...
    99+
    2022-06-06
    view Android
  • MeasureSpec在View测量中有什么作用
    MeasureSpec在View测量中起到了限制和约束的作用。它用于指定View的期望尺寸和测量模式,并影响View的实际尺寸。 M...
    99+
    2023-10-22
    MeasureSpec View
  • MeasureSpec在View测量中的作用是什么
    本篇内容主要讲解“MeasureSpec在View测量中的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MeasureSpec在View测量中的作用是...
    99+
    2022-10-19
  • Android如何实现View滑动效果
    这篇文章给大家分享的是有关Android如何实现View滑动效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、View的滑动简介View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到...
    99+
    2023-06-14
  • Android如何扩大View点击范围
    这篇文章将为大家详细讲解有关Android如何扩大View点击范围,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如下图所示,你的UI元素可能小于48dp,图标仅有32dp,按钮仅有40dp,但是他们的实际...
    99+
    2023-06-15
  • Android如何实现自定义View中attrs.xml
    这篇文章主要为大家展示了“Android如何实现自定义View中attrs.xml”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android如何实现自定义View中attrs.xml”这篇文章...
    99+
    2023-05-30
    android view attrs.xml
  • 如何Android项目中创建一个View
    这篇文章将为大家详细讲解有关如何Android项目中创建一个View,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。从布局文件到LayoutParams首先从Activity的setConte...
    99+
    2023-05-31
    android view roi
  • Android如何自定义View歌词控件
    本篇内容介绍了“Android如何自定义View歌词控件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言一、 歌词解析歌词实体类Lrc...
    99+
    2023-06-20
  • 如何在Android中利用View显示分数
    这篇文章给大家介绍如何在Android中利用View显示分数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。所用的知识:(1)自定义View中的 path ,主要用来绘制指示块。(2)属性动画-ValueAnimator...
    99+
    2023-05-31
    android view roi
  • 如何在Android中动态添加一个view
    如何在Android中动态添加一个view?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。<xml version="1.0" ...
    99+
    2023-05-30
    android view
  • cad如何测量面积
    这篇文章主要介绍“cad如何测量面积”,在日常操作中,相信很多人在cad如何测量面积问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”cad如何测量面积”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!cad测量...
    99+
    2023-07-02
  • 如何在Android项目中自定义view函数
    如何在Android项目中自定义view函数 ?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先 往Canvas上面draw需要一个Paint。 Paint p ...
    99+
    2023-05-31
    android view roi
  • 如何在Android应用中实现自定义View
    本篇文章为大家展示了如何在Android应用中实现自定义View,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android自定义view的种类自定义view大概可以分为四个大类,主要是通过实现方式...
    99+
    2023-05-31
    android view roi
  • Android如何实现自定义view画圆效果
    这篇文章主要介绍了Android如何实现自定义view画圆效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。看图代码:package sjx.com.custonv...
    99+
    2023-05-30
    android view
  • 解析android 流量监测的实现原理
    Linux 系统下所有的信息都是以文件的形式存在的,所以应用程序的流量信息也会被保存在操作系统的文件中。Android 2.2 版本以前的系统的流量信息都存放在 proc/ne...
    99+
    2022-06-06
    流量 Android
  • Android如何自定义view实现半圆环效果
    小编给大家分享一下Android如何自定义view实现半圆环效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下1.自定义属性<declare-s...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作