Android:可见屏幕的高度 - dp ....工作解决方案?

时间:2013-08-21 19:47:23

标签: android size screen scrollview metrics

我看到这个问题被问了100次......但是我尝试过的解决方案都没有工作......大多数都在使用3个设备中的2个,而在第3个渲染是错误的:(

我需要通过底部的“button_area”缩小可见屏幕的大小(请参阅ic_launcher图标,例如40dp高度),以便为WebView提供大小。

(所有因为我希望它带来工作,我有一个可滚动的WebView,当我触摸button_area我可以滚动整个屏幕以显示button_area下方的菜单与ScrollView)

我尝试了大约10-15种解决方案,我在网上找到了它,有时它在模拟器和我的小三星Galaxy ace上工作,但在星系S3上,高度又错了。尝试了不同的方法和代码......

我的屏幕应如下所示:

Screen should look like this

实际上我的代码看起来像这样:

    // STATUSBAR
    int statusbar = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
      if (resourceId > 0) {
           statusbar = getResources().getDimensionPixelSize(resourceId);
      }   
    Toast.makeText(getBaseContext(), "Statusbar= " + String.valueOf(statusbar), Toast.LENGTH_SHORT).show();   

    // GET SCREEN-HEIGHT
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    // HEIGHT IN PIXEL
    float pix_h = metrics.heightPixels;

    // HEIGHT IN DP
    float dp_h = (metrics.heightPixels * 160) / metrics.ydpi;
    Toast.makeText(getBaseContext(), "Height in DP= " + String.valueOf(dp_h), Toast.LENGTH_SHORT).show();

    final float scale = getBaseContext().getResources().getDisplayMetrics().density;
    int pixels = (int) ((dp_h) * scale + 0.5f);
    Toast.makeText(getBaseContext(), "Height in Pixel= " + String.valueOf(pixels), Toast.LENGTH_SHORT).show();

    int height = pixels - statusbar;

谢谢你的帮助!

最诚挚的问候 格哈德

1 个答案:

答案 0 :(得分:0)

您是否尝试过getMeasuredWidth();getMeasuredHeight()?如果您需要在布局之前获取屏幕大小,则必须使用虚拟活动,例如扩展此类的活动:

public class MeasureLayout extends RelativeLayout {

private static int windowH, windowW;

public MeasureLayout(Context context) {
    super(context);
}

public MeasureLayout(Context context, AttributeSet attrs){
    super(context, attrs);
}


protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    windowW = getMeasuredWidth();
    windowH = getMeasuredHeight();
}

public static int getWidth(){
    return windowW;
}

public static int getHeight(){
    return windowH;
}

}

否则值将为0.

希望这有帮助,Alex