当我将它们添加到视图时,小部件x和y会加倍

时间:2014-04-20 15:59:04

标签: android view relativelayout

我有一个自定义视图,我以编程方式添加所有各种小部件。 由于我真的需要绝对布局,我使用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

这些是正确的值。每次我在那之后再次重新添加所有小部件时,我都会得到这些正确的值。

那么,为什么在第一次将它们添加到视图中时它们都加倍?

1 个答案:

答案 0 :(得分:0)

因此,在找到getLeft()和getTranslationX()信息后,我通过在我的widget构造函数中执行setLeft()而不是setX()和setTop()而不是setY()来解决问题。