为什么获得如下所示的有效屏幕尺寸(screen-actionbar-statusbar)会在不同时间产生不同的结果?第一次启动我的片段并调用getEffectiveScreenSize会出错(操作栏大小为0),但是第二次是正确的,其余的都是正确的。
因此,获得如下所示的操作栏大小并不可靠,为什么呢?什么是正确安全的方法?
public static Point getScreenSize( Activity theActivity )
{
Display theDisplay = theActivity.getWindowManager().getDefaultDisplay();
Point sizePoint = new Point();
theDisplay.getSize( sizePoint );
return sizePoint;
}
public static int getStatusBarHeight( Activity theActivity )
{
int result = 0;
int resourceId = theActivity.getResources().getIdentifier( "status_bar_height", "dimen", "android" );
if (resourceId > 0)
{
result = theActivity.getResources().getDimensionPixelSize( resourceId );
}
return result;
}
public static int getActionBarHeight( Activity theActivity )
{
return theActivity.getActionBar().getHeight();
}
public static Point getEffectiveScreenSize( Activity theActivity )
{
Point screenSize = getScreenSize( theActivity );
screenSize.y = screenSize.y - getStatusBarHeight( theActivity ) - getActionBarHeight( theActivity );
return screenSize;
}
此更改没有帮助:
public static int getActionBarHeight( Activity theActivity )
{
//return theActivity.getActionBar().getHeight();
int result = 0;
int resourceId = theActivity.getResources().getIdentifier( "actionbar_bar_height", "dimen", "android" );
if (resourceId > 0)
{
result = theActivity.getResources().getDimensionPixelSize( resourceId );
}
return result;
}
最佳答案
我不确定为什么所有的方法都是静态的,但由于某种原因,您还没有包含相关代码,更确切地说-在哪里使用getEffectiveScreenSize
?
我能给您的最佳答案必须基于以下假设-在测量布局之前,之后和/或在完全初始化操作栏之前,您必须在lifecycle中的不同点调用getEffectiveScreenSize
(也许看看callbacks related to action bar)。
如果您想拥有操作栏的布局帐户,可以使用一个尺寸
?android:attr/actionBarSize
如果您试图使内容和操作栏重叠或停止重叠,则可能必须在样式中更改操作栏叠加的值
<item name="android:windowActionBarOverlay">bool</item>