如何在屏幕上的特定位置设置视图?

Posted

技术标签:

【中文标题】如何在屏幕上的特定位置设置视图?【英文标题】:How to set a view at specific position on screen? 【发布时间】:2020-09-24 18:53:42 【问题描述】:

如何以编程方式在屏幕上的特定点设置视图?我想使用像xy 这样的点。我想要translateXtranslateY。例如,我想为 Point x: 0y: 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 锚定到屏幕上的特定位置并在滚动时将其保留在那里

如何将窗口应用程序 python/tkinter 放置在屏幕上的特定位置?

如何检查点击是不是发生在特定位置

如何查看用户是不是在屏幕上的同一位置按下 2 秒?

如何在导航栏上为单个视图上的不同按钮设置标题?

如何在 React Native 中从屏幕的特定位置打开模式或工具提示?