我看到这个问题被问了100次......但是我尝试过的解决方案都没有工作......大多数都在使用3个设备中的2个,而在第3个渲染是错误的:(
我需要通过底部的“button_area”缩小可见屏幕的大小(请参阅ic_launcher图标,例如40dp高度),以便为WebView提供大小。
(所有因为我希望它带来工作,我有一个可滚动的WebView,当我触摸button_area我可以滚动整个屏幕以显示button_area下方的菜单与ScrollView)
我尝试了大约10-15种解决方案,我在网上找到了它,有时它在模拟器和我的小三星Galaxy ace上工作,但在星系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;
谢谢你的帮助!
最诚挚的问候 格哈德
答案 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