自定义视图之间共享布局尺寸?

时间:2013-01-27 20:52:18

标签: android layout dimensions custom-view

所以我有两个自定义视图。我需要知道我的自定义视图的像素尺寸,我得到了以下方式:

    protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
    {
        width_dimension = xNew; // << this is the field i need to share
        super.onSizeChanged(xNew, yNew, xOld, yOld);
    }

我有另一个自定义视图,我需要传递字段“width_dimension”。这样做的正确方法是什么?我尝试在我的活动的onCreate()方法中传递信息,但是在我的自定义视图的onSizeChanged()之前调用它,因此该字段未定义。我也试过传入onSizeChanged()方法(上面)但是我的OTHER自定义视图还没有被xml布局实例化(抛出空指针异常)。

重写onSizeChanged()方法以确定视图宽度的正确方法(在xml中设置为wrap_content)?我如何将这些信息分享到另一个自定义视图?

很抱歉,如果这个问题不是很清楚。这很难解释,我面临的问题是我需要知道当我的所有自定义视图都已实例化并布局时,我可以在它们之间交换维度信息(在运行时确定)。

1 个答案:

答案 0 :(得分:0)

您可以使用维度,请参阅此处:如果您在xml中实现自定义视图,则http://developer.android.com/guide/topics/resources/more-resources.html#Dimension非常有用..您还可以在代码中加载维度:

Resources res = context.getResources(); // you can use application or activity context for this
float customWidth = res.getDimension(R.dimen.custom_width);

我希望它有所帮助!

修改

所以这似乎有所帮助:

yourlayout.getViewTreeObserver().addOnGlobalLayoutListener(ViewTreeObserver.OnGl‌​obalLayoutListener yourCustomListener); 

在视图被测量并绘制之后将调用回调。此外,我建议在调用回调后从视图中删除侦听器,以避免无用的调用。