我有一个自定义视图,我以编程方式添加所有各种小部件。 由于我真的需要绝对布局,我使用RelativeLayout并为每个小部件设置左/上边距。
我第一次添加小部件时,他们在屏幕上的X和Y位置恰好是我设置的值的两倍。每次AFTER(我删除所有小部件并重新添加它们)后,他们的X和Y坐标都是正确的。
这是我用来添加它们的循环:
RelativeLayout view = (RelativeLayout) findViewById(R.id.dashboard_view);
view.removeAllViews();
view.setBackgroundColor(dash.getBackgroundColor());
Log.d(TAG, "updateUI: " + view.getX() + ", " + view.getY() + ", " + view.getWidth() + ", " + view.getHeight());
for (IGauge g : dash.getGauges()) {
View v = (View) g;
Point size = g.getSize();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(size.x, size.y);
params.leftMargin = (int) v.getX();
params.topMargin = (int) v.getY();
view.addView(v, params);
Log.d(TAG, "updateUI: " + v.getClass().getSimpleName() + ": " + v.getX() + ", " + v.getY() + ", " + size.x + ", " + size.y);
}
view.invalidate();
在他们第一次加入之后,我弃掉了他们的位置,我得到了:
dumpViews: Label: 48.0, 96.0
dumpViews: Level: 192.0, 206.0
dumpViews: Level: 288.0, 206.0
dumpViews: Meter: 96.0, 482.0
请注意,所有这些值都与循环期间记录的X,Y值完全相同:
下次我需要重新添加所有小部件时,循环期间记录的所有X,Y值在添加期间都是SAME,但之后的转储显示:
dumpViews: Label: 24.0, 48.0
dumpViews: Level: 96.0, 103.0
dumpViews: Level: 144.0, 103.0
dumpViews: Meter: 48.0, 241.0
这些是正确的值。每次我在那之后再次重新添加所有小部件时,我都会得到这些正确的值。
那么,为什么在第一次将它们添加到视图中时它们都加倍?
答案 0 :(得分:0)
因此,在找到getLeft()和getTranslationX()信息后,我通过在我的widget构造函数中执行setLeft()而不是setX()和setTop()而不是setY()来解决问题。