【问题标题】:Share layout dimensions between custom views?在自定义视图之间共享布局尺寸?
【发布时间】:2013-01-27 20:52:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: android layout dimensions custom-view


    【解决方案1】:

    您可以使用维度,请参见此处: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); 
    

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

    【讨论】:

    • 问题是直到运行时我才知道大小。在我的 layout.xml 文件中,尺寸只是 wrap_content。
    • 你也可以使用这个:yourlayout.getViewTreeObserver().addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener yourCustomListener);在视图被测量和绘制之后,回调将被调用..
    • 谢谢,这正是我所需要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2019-07-31
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多