当前位置:首页 » 安卓系统 » android自定义view大小

android自定义view大小

发布时间: 2024-09-28 05:57:35

‘壹’ Android中自定义View超出屏幕如何显示

在调用scrollBy之前做一下判断即可。
如果想要判断当前滚动到哪里的话,应该用getScrollX()和getScrollY
getLeft()拿到的是layout时的位置,scroll是不会改变view自身的layout的。

补充:自定义View里面显示一张图片,并且该View的尺寸大于屏幕的尺寸,要想看到被遮住的地方,只能上下左右那么滑屏来显示。如果使用ScrollView的话,不能斜着滑屏。

‘贰’ Android —— 自定义View中,你应该知道的知识点

在Android开发中,自定义View是实现特殊控件需求的关键手段。通过自定义View,开发者可以创造出满足特定功能和设计的控件,以丰富应用的用户体验。下面,我们将深入探讨自定义View的相关知识点。

首先,了解Android的控件架构。在Android中,控件可以分为ViewGroup和View两大类。ViewGroup用于包含多个View,管理它们的绘制、测量和交互,而View则负责显示内容。在Activity的控件树中,从顶层开始,负责调度事件的ViewParent对象是控件树的核心。Activity通过setContentView()方法加载布局,DecorView作为根View,位于顶层,将显示内容呈现给用户。DecorView分为TitleView和ContentView两部分,其中ContentView通过Framelayout作为根布局加载布局文件。

了解View的绘制时机。View的第一次绘制通常发生在Activity启动时,即onCreate()方法执行后,通过setContentView()方法加载布局。此外,当View树发生改变,或主动调用invalidate()方法时,也会触发View的绘制。

在Activity中调用setContentView()方法开始加载顶级View,即DecorView,这个过程通过PhoneWindow中的installDecor()方法实现。在DecorView初始化后,开始执行View的工作流程。当Activity进入Resume状态时,ViewRootImpl实例开始工作,执行measure、layout和draw方法,完成View的绘制。

View的测量大小发生在measure()方法中,用于决定View的实际尺寸。measure方法分为View和ViewGroup两种实现,其中View只测量自身大小,而ViewGroup还需测量子View的大小。MeasureSpec用于封装View的测量规格,包括宽度、高度和测量模式。在测量过程中,MeasureSpec通过makeMeasureSpec()方法生成,获取模式和尺寸信息。

对于自定义FlowLayout,需要解决尺寸设置、子View布局和绘制UI元素的问题。通常,这在onMeasure()、onLayout()和onDraw()方法中完成。在onMeasure()方法中,FlowLayout需要递归测量子View,并计算最终高度。而在onLayout()方法中,定义子View的显示位置。

在一道滴滴面试题中,分析了Activity内根布局LinearLayout和包含View的尺寸属性。通过理解LinearLayout的onMeasure()方法和子View的测量过程,最终确定了界面颜色为蓝色。这个问题展示了对自定义View测量过程的理解和应用。

自定义View的学习资源可以通过阅读相关书籍、参考官方文档和探索开源项目获取。掌握自定义View的知识,将为Android开发者提供更广阔的创作空间和更丰富的应用体验。

‘叁’ Android 自定义View:为什么你设置的wrap_content不起作用

在使用自定义View时,View宽 / 高的 wrap_content 属性不起自身应有的作用,而且是起到与 match_parent 相同作用。

其实这里有两个问题:

请分析 & 解决问题之前,请先看自定义View原理中 (2)自定义View Measure过程 - 最易懂的自定义View原理系列

问题出现在View的宽 / 高设置,那我们直接来看自定义View绘制中第一步对View宽 / 高设置的过程:measure过程中的 onMeasure() 方法

继续往下看 getDefaultSize()

从上面发现:

那么有人会问:wrap_content和match_parent具有相同的效果,为什么是填充父容器的效果呢?

我们知道,子View的MeasureSpec值是根据子View的布局参数(LayoutParams)和父容器的MeasureSpec值计算得来,具体计算逻辑封装在getChildMeasureSpec()里。

接下来,我们看生成子View MeasureSpec的方法: getChildMeasureSpec() 的源码分析:

getChildMeasureSpec()

从上面可以看出,当子View的布局参数使用 match_parent 或 wrap_content 时:

所以: wrap_content 起到了和 match_parent 相同的作用:等于父容器当前剩余空间大小

当自定义View的布局参数设置成wrap_content时时,指定一个默认大小(宽 / 高)。

这样,当你的自定义View的宽 / 高设置成wrap_content属性时就会生效了。

网上流传着这么一个解决方案:

答: 是,当父View为 AT_MOST 、View为 match_parent 时,该View的 match_parent 的效果就等于 wrap_content 。上述方法存在逻辑错误,但由于这种情况非常特殊的,所以导致最终的结果没有错误。具体分析请看下面例子:

从上面的效果可以看出,View大小 = 默认值

我再将子View的属性改为 wrap_content :

从上面的效果可以看出,View大小还是等于默认值。

相信看到这里你已经看懂了:

为了更好的表示判断逻辑,我建议你们用本文提供的解决方案,即根据布局参数判断默认值的设置

不定期分享关于 安卓开发 的干货,追求 短、平、快 ,但 却不缺深度

‘肆’ android 自定义view 怎么设置其宽度和高度

自定义View 可以设置iji的布局,
1.在布局中设置宽高
2.在ondraw方法中绘制的view设置宽高
3.LayoutInflater设置宽高

‘伍’ Android自定义ViewGroup内的View布局奇怪问题

您好,问题不奇怪,TextView的尺寸是会变小。这样解释:

控件有两类非常重要的属性,坐标:x,y; 尺寸:width,height.
控件其实是一些矩形框,这两类属性确定了后,就可以在Canvas上画出这个矩形了。清楚这一点后,
就要知道android 怎么确定X,Y和宽,高。
X,Y:是控件在父控件中的坐标
宽高没什么好讲的,就是矩形的宽和高,

android通过View 的onLayout()确定控件在父控件中XY;通过onMeasure()确定控件宽高,想象一下一个控件树(xml 布局文件),从根节点开始,根节点XY和宽高通过窗口屏幕大小确定,它确定了后,依次调用其子节点的onLayout(),onMeasure()来确定子节点在父节点中的坐标和尺寸。就是android LayoutInflater整个过程了。(其他窗口系统的这个过程基本一样)

理解这个后,就应该知道,控件的坐标和父控件有关;子控件尺寸,如果子控件有fill_parent这样的属性,那么它的尺寸也和父控件有关了。

热点内容
手机初始密码怎么改 发布:2024-11-24 13:04:05 浏览:201
linuxzip命令安装 发布:2024-11-24 13:04:02 浏览:832
最小均方算法误差 发布:2024-11-24 13:02:31 浏览:780
mybatis注解存储过程 发布:2024-11-24 13:02:18 浏览:910
天翼宽带无线密码怎么改 发布:2024-11-24 13:01:40 浏览:258
压缩文件下载后打不开 发布:2024-11-24 12:53:30 浏览:907
qq空间访问量源码 发布:2024-11-24 12:53:28 浏览:61
c语言字符串遍历 发布:2024-11-24 12:51:12 浏览:321
2的100次方简便的算法 发布:2024-11-24 12:48:25 浏览:219
oracle添加sql 发布:2024-11-24 12:47:10 浏览:142