-1

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

    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)?以及如何将此信息共享到另一个自定义视图?

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

4

1 回答 1

0

您可以使用维度,请参见此处: http: //developer.android.com/guide/topics/resources/more-resources.html#Dimension如果您在 xml 中实现了自定义视图,则很有用。您还可以将维度加载到像这样的代码:

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); 

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

于 2013-01-27T21:04:47.500 回答