如何将布局宽度/高度的值传递给自定义视图类
问题的原因是无法从自定义视图类中直接获取布局的宽度和高度。解决方法是通过将视图实例传递给需要这些值的方法,并使用getViewTreeObserver().addOnGlobalLayoutListener()
来获取布局的宽度和高度。
具体解决方法如下所示:
首先,在自定义视图类中创建一个方法,该方法需要一个视图实例、一个drawable资源id和一个位置作为参数。
public void setIcon(final RoundedButton rb, final int drawableResourceId, final int position){ mIconPosition = position; rb.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { buttonWidth = rb.getWidth(); buttonHeight = rb.getHeight(); //需要对尺寸进行的操作 } }); }
在这个方法中,我们将位置参数保存到一个变量中,并使用rb.getViewTreeObserver().addOnGlobalLayoutListener()
来添加一个监听器。
在监听器的onGlobalLayout()
方法中,我们可以使用rb.getWidth()
和rb.getHeight()
来获取布局的宽度和高度,并将它们保存到相应的变量中。
需要注意的是,不能使用this.getViewTreeObserver().addOnGlobalLayoutListener()
来添加监听器,即使该类扩展了某种类型的视图。因此,我们需要通过将视图实例作为参数传递给方法来解决这个问题。
通过这种方法,我们可以在自定义视图类中获取布局的宽度和高度,并执行任何需要这些值的操作。