0

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

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

(因为我想让它工作,我有一个可滚动的 WebView,当我触摸 button_area 时,我可以向上滚动整个屏幕以显示带有 ScrollView 的 button_area 下方的菜单)

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

我的屏幕应如下所示:

屏幕应该是这样的

实际上我的代码是这样的:

    // 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;

谢谢你的帮助!

最好的问候格哈德

4

1 回答 1

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。

希望这会有所帮助,亚历克斯

于 2013-08-21T19:53:17.043 回答