【问题标题】:Android: How to get a custom View's height and width? [duplicate]Android:如何获取自定义视图的高度和宽度? [复制]
【发布时间】:2011-05-03 18:16:27
【问题描述】:

可能重复:
How to size an Android view based on its parent’s dimensions

如何使用getMeasuredWidth()getMeasuredHeight?它总是返回 0。这与 getHeight()getWidth() 有什么区别?

【问题讨论】:

  • 为什么我不能在视图中使用Display display = getWindowManager().getDefaultDisplay();
  • 不是重复的。问题中根本没有提到父维度!

标签: android views


【解决方案1】:

getHeight 得到高度,getWidth 得到宽度。但是你调用这些方法太快了。

如果您在onCreateonResume 中调用它们,则视图尚未绘制。您必须在绘制视图后调用它们。

【讨论】:

  • 我在问 getMeasuredHeight() 和 getHeight() 之间的区别。好的,那我如何获得屏幕的宽度和高度呢?
【解决方案2】:

不要试图将它们放入其构造函数中。尝试在onDraw() 方法中调用它们。

【讨论】:

  • 不是连续调用onDraw吗?那里的任何行动都可能对性能产生负面影响。
  • 确实,我觉得最好的做法是监听onsizechanged事件,当时把宽高放在成员变量中。然后,您可以在您的 ondraw 方法中使用它们,而无需再次询问它们。
  • 不要在 onDraw 方法中做任何繁重的事情。 onDraw 仅用于绘图
【解决方案3】:

我也迷失在getMeasuredWidth()getMeasuredHeight() getHeight()getWidth() 很长一段时间......后来我发现onSizeChanged() 方法真的很有帮助。

新博文:如何在 Android http://syedrakibalhasan.blogspot.com/2011/02/how-to-get-width-and-height-dimensions.html 中获取自定义视图(扩展视图)的宽度和高度尺寸

【讨论】:

    【解决方案4】:

    刚刚得到了一个获取自定义视图高度和宽度的解决方案:

    @Override
    protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld){
        super.onSizeChanged(xNew, yNew, xOld, yOld);
    
        viewWidth = xNew;
        viewHeight = yNew;
    }
    

    它在我的情况下工作。

    【讨论】:

    • 我相信这是确定宽度和高度的正确方法。也是最简单的。
    • 一个问题是当键盘出现时这个被调用
    【解决方案5】:

    可以使用以下方法获取视图的宽高, 例如,

    int height = yourView.getLayoutParams().height;
    int width = yourView.getLayoutParams().width;
    

    这给出了在 XML 布局中指定的视图的转换值。

    如果在XML中指定height的值为53dp,你会得到80的整数转换值。

    【讨论】:

    • 请注意,只要指定了宽度或高度,这将给出宽度/高度。如果您设置 WRAP_CONTENT,这不会给出正确的宽度/高度。它将返回 -1 或 0,具体取决于它的“MATCH_PARENT”还是“WRAP_CONTENT”。 developer.android.com/reference/android/view/…
    • 是的,它给了我-1,而不是滚动视图的实际高度,我需要一个滚动视图高度,在我的情况下,我有滚动视图和搜索栏,需要同时更改它,即如果我滚动x 数量通过滚动视图同时搜索栏进度应该改变与滚动视图相同。
    • 在自定义视图 getLayoutParams 的初始化中不起作用
    • 在继承的视图类上这个方法(getLayoutParams)返回null。
    【解决方案6】:

    getHeight()getMeasuredHeight() 之间的区别在于,第一种方法将返回View 的实际高度,第二种方法将返回View 的孩子的汇总高度。换句话说,getHeight() 返回视图高度,getMeasuredHeight() 返回视图需要显示所有元素的高度

    【讨论】:

    • 在任何情况下都可以相同?我得到的两个值相同,有可能吗?
    • 当然可以。例如,如果您的孩子与父母的身高相同。
    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2012-08-27
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2011-06-08
    相关资源
    最近更新 更多