如何在屏幕上的特定位置设置视图?
Posted
技术标签:
【中文标题】如何在屏幕上的特定位置设置视图?【英文标题】:How to set a view at specific position on screen? 【发布时间】:2020-09-24 18:53:42 【问题描述】:如何以编程方式在屏幕上的特定点设置视图?我想使用像x
和y
这样的点。我不想要translateX
或translateY
。例如,我想为 Point x: 0
和 y: 0
设置一个视图,这意味着它需要位于屏幕的左上角。我怎样才能做到这一点?
我正在尝试这个,但视图将 X 和 Y 翻译成我不想要的。
val layoutInflater = LayoutInflater.from(context)
val inflatedView: View = layoutInflater.inflate(R.layout.fragment_change_font_size_right, null, false)
inflatedView.popup_xml_view.x = 0f
inflatedView.popup_xml_view.y = 0f
【问题讨论】:
您可以尝试将目标视图放置到窗口的根视图。并且根视图必须具有两个维度的 match_parent。 【参考方案1】:android 有一个 layout 可以支持此要求,但我认为它在性能方面非常糟糕并且已被弃用(我希望我做出这个肯定没有错)。但是,可以使用 FrameLayout
实现相同的行为,并在该布局中添加视图。
要在特定位置添加视图,请创建其布局参数以设置宽度和高度,然后设置将视图定位为绝对坐标的边距(尺寸以像素为单位):
val imageView = ImageView(this)
imageView.setBackgroundResource(android.R.color.holo_red_dark)
imageView.layoutParams = FrameLayout.LayoutParams(width, height).apply
setMargins(left, top, right, bottom)
root.addView(imageView)
对于 200 的高度/宽度和 (100, 100, 0, 0) 的边距,它将类似于下图(在模拟的 Pixel 3 上运行)。
注意:Here 是一个演讲,他们谈论这种模仿 AbsoulteLayout
的方法以及他们“杀死”它的原因。
【讨论】:
【参考方案2】:我发现这行得通:
ViewGroup.MarginLayoutParams margins = (ViewGroup.MarginLayoutParams) layout.getLayoutParams();
margins.topMargin = 100;
margins.leftMargin = 200;
或者使用动画:
view.animate().x(x).y(y).setDuration(0).start();
【讨论】:
以上是关于如何在屏幕上的特定位置设置视图?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIView 锚定到屏幕上的特定位置并在滚动时将其保留在那里