2012-04-09 44 views
5

我在onDraw()方法的自定义视图中调用getHeight和getWidth。 getHeight()返回1,073,742,549getWidth()返回1,073,742,304。但是,当我查看屏幕高度和宽度的显示指标时,分别获得800和480。什么是getHeight和getWidth返回?查看getHeight()和getWidth()返回值太大

我得到了我的视图的尺寸,所以我可以选择将在视图中放置的位图的尺寸。

谢谢。

+0

我是Android新手,但我有类似的经验。它必须在Android版本上做一些事情,因为同样的项目在4.1上工作正常,但在2.3.6上有这种奇怪的行为。也许一些兼容性设置丢失了。 – 2013-05-25 19:49:33

+0

您是否也可能重写onMeasure,并使用MeasureSpec.makeMeasureSpec(width,MeasureSpec.EXACTLY)的值调用setMeasuredDimensions。我相信您所获得的值将从具有MeasureSpec.EXACTLY的makeMeasureSpec和您指定的尺寸中返回。 – 2015-11-17 20:26:50

回答

10

没有明确解决你的问题,但奇怪的:

Width: 
1,073,742,304 == 0x400001E0 
      480 == 0x000001E0 

Height: 
1,073,742,549 == 0x400002D5 
      725 == 0x000002D5 

此自定义视图的大小约为725 x 480?我不知道额外0x40000000来自哪里,但它看起来可能几乎是正确的,除了1位:)

+2

谢谢。这很奇怪。所以我正在对宽度和高度对0xbfffffff以获得正确的尺寸,这是有效的。 – Jays 2012-04-24 22:54:32

+1

@Jays,我又看了一遍,我认为最安全的做法可能是'View.MeasureSpec.getSize(getWidth())'(还有高度)。 Measurespec可以在该顶级角色内发出其他信号,如果有变化,它可能会在稍后咬住(例如,如果它报告0x8000xxxx)。 – Tim 2012-04-24 23:04:08

3

也许,你在你的自定义视图中做了这样的事情。

final int desiredHSpec = MeasureSpec.makeMeasureSpec(pixelHeight, MeasureSpec.MODE_CONSTANT); 
final int desiredWSpec = MeasureSpec.makeMeasureSpec(pixelWidth, MeasureSpec.MODE_CONSTANT); 
setMeasuredDimension(desiredWSpec, desiredHSpec); 

这样Android:Why after override onMeasure() in a custom view, the view's text can't show in RalativeLayout?

如果你把它变成

setMeasuredDimension(width, height); 

,你会得到简单的小宽度,高度上的onSizeChanged()和onLayout()。

0

我也有这个问题。我解决这个问题的方式是覆盖onMeasure方法。这样视图总是具有相同的大小。例如,如果你想让视图具有屏幕的大小和宽度,你应该这样做:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     WindowManager wm = (WindowManager)this.getContext().getSystemService(Context.WINDOW_SERVICE); 
     Display display = wm.getDefaultDisplay(); 
//display.getWidth() and display.getHeight() return the screen dimensions 
     this.setMeasuredDimension(display.getWidth(), display.getHeight()); 
    } 
相关问题