【问题标题】:Android: Finding size (resolution-wise) of a GalleryViewAndroid:查找 GalleryView 的大小(分辨率)
【发布时间】:2011-04-26 13:42:56
【问题描述】:

我有一个layout,其中Gallery heightWRAP_CONTENT (width is FILL_PARENT),底部边距为80dp。这会将80dp 留在屏幕底部以显示其他内容。

问题是我怎样才能知道我在这个Galleryheight 中有多少像素?
我需要这个来设置画廊的getViewbitmap 的大小(因为我希望每张图片占据整个画廊屏幕)各种设备应该给我不同的高度像素...

显然当我查询Gallery.getHeight 时,它返回零。

另外,如果图像本身小于画廊视图端口,我想放大它。然而setScaleType(FIT_CENTER) 似乎只缩小(如果图像大于视口)但没有放大?我错过了什么吗?

提前感谢您的帮助。

【问题讨论】:

    标签: android android-layout height gallery


    【解决方案1】:

    Gallery 只是另一个View,因此为View 定义的任何方法都可以使用。使用myGalery.getHeight();

    来自View API 参考页面:http://developer.android.com/reference/android/view/View.html

    大小、内边距和边距

    视图的大小用宽度和高度表示。一个视图实际上拥有两对宽度和高度值。

    第一对称为测量宽度和测量高度。这些尺寸定义了视图在其父视图中的大小(有关详细信息,请参阅布局。)可以通过调用 getMeasuredWidth() 和 getMeasuredHeight() 获得测量的尺寸。

    第二对简单地称为宽度和高度,或者有时称为绘图宽度和绘图高度。这些尺寸定义了屏幕上、绘图时和布局后视图的实际大小。这些值可能(但不一定)与测量的宽度和高度不同。宽度和高度可以通过调用getWidth()和getHeight()获得。

    要测量其尺寸,视图会考虑其填充。对于视图的左侧、顶部、右侧和底部,填充以像素表示。填充可用于将视图的内容偏移特定数量的像素。例如,left padding 为 2 会将视图的内容推到左边缘右侧 2 个像素。可以使用 setPadding(int, int, int, int) 方法设置填充,并通过调用 getPaddingLeft()、getPaddingTop()、getPaddingRight() 和 getPaddingBottom() 进行查询。


    更新

    测量时要小心。如果你在构造函数上使用它,它会返回零,因为它还没有被绘制。除非您绝对确定 GridView 在您测量时可见,否则您可以通过添加 View.OnLayoutChangeListener 并实施

    public abstract void onLayoutChange (View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) 
    

    http://developer.android.com/reference/android/view/View.OnLayoutChangeListener.html

    或覆盖protected void onSizeChanged (int w, int h, int oldw, int oldh)

    【讨论】:

    • 可能是这种情况,因为当我测量这些数字并正确返回零时,视图只是被夸大了。这是一个先有鸡还是先有蛋的情况,因为我需要发送正确大小的像素数据。然而,我通过更改布局 XML 以在画廊的高度上使用 FILL_PARENT 解决了这个问题。显然它是在编译期间计算出来的,现在我可以始终如一地获得所需的 605(在其他小屏幕模拟器上也是如此)再次感谢您的帮助!
    【解决方案2】:

    你可以得到总高度并从中删除 80px 即(你的画廊高度) 通过此代码获取总高度

    Display display;
    display = activity.getWindowManager().getDefaultDisplay(); 
    display.getHeight()
    

    【讨论】:

    • 有没有办法做dp算术?对于分辨率较低的屏幕,80dp 不等于 80px...
    • en.wikipedia.org/wiki/List_of_common_resolutions 可能会帮助或 DisplayMetrics displaymetrics = new DisplayMetrics(); wn=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE); act.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多