在Android中定位子视图

在Android中定位子视图,android,android-layout,Android,Android Layout,我试图理解Android的视图结构,但对于如何定位子视图,我有点困惑 假设我有一个FrameLayout,它将包含我的自定义视图。我的自定义视图仅绘制一个50x50 px的矩形 所以我设置了我的View.setMeasureDimension(50,50) 现在,我应该如何移动此视图?我找到了几种方法 1:我可以做一些类似canvas.drawRect(newrect(offsetX,offsetY,right,bottom))的事情但这会使我的视图变大,因此我的测量宽度/高度不再有效 2:在父

我试图理解Android的视图结构,但对于如何定位子视图,我有点困惑

假设我有一个
FrameLayout
,它将包含我的自定义视图。我的自定义视图仅绘制一个50x50 px的矩形

所以我设置了我的
View.setMeasureDimension(50,50)
现在,我应该如何移动此视图?我找到了几种方法

1:我可以做一些类似canvas.drawRect(newrect(offsetX,offsetY,right,bottom))的事情
但这会使我的视图变大,因此
我的测量宽度/高度
不再有效

2:在父元素上设置填充,从而影响
left/top View.getLeft()/View.getTop()
。但这将影响所有子元素

3:使用
View.offsetLeftAndRight(要移动的像素数)
。我不太明白这到底是怎么回事。它是否会导致某种类型的
canvas.translate()
?但是这样的话,我需要将状态保持在调用
offsetLeftANdRight()
的次数上,因为调用
offsetLeftANdRight(10)
然后调用
offsetLeftANdRight(10)
会将其移动20px


我有点困惑什么是“正确”的方法。有更好的方法吗?

Android应用程序运行在不同大小的设备上,屏幕往往完全不同。因此,您不应该使用任何绝对定位或大小调整。尽可能创建视图并将它们相对放置

您需要熟悉Android提供的各种视图以创建布局:

由于项目在不同设备(和方向)上的位置不同,因此视图关系比绝对位置更重要,因此有时需要进行大量思考

LinearLayout是放置控件的一个很好的通用容器,尽管RelativeLayout通常更有效(如果有时使用起来有点困难)


一旦项目彼此相对定位,你就可以使用填充和边距来调整它们的位置。

Android应用程序在不同大小的设备上运行,屏幕通常完全不同。因此,您不应该使用任何绝对定位或大小调整。尽可能创建视图并将它们相对放置

您需要熟悉Android提供的各种视图以创建布局:

由于项目在不同设备(和方向)上的位置不同,因此视图关系比绝对位置更重要,因此有时需要进行大量思考

LinearLayout是放置控件的一个很好的通用容器,尽管RelativeLayout通常更有效(如果有时使用起来有点困难)


一旦项目彼此相对定位,您可以使用填充和边距来调整它们的位置。

谢谢您的回复,我需要绝对定位,因为这用于对象的运行时放置,我还知道不同的屏幕大小和dpi,我将在DisplayMetrics后标准化我的像素。谢谢您的回复,我需要绝对定位,因为它用于对象的运行时放置,我还知道不同的屏幕大小和dpi,我将在DisplayMetrics之后标准化我的像素。