我最近在一个果冻豆设备上测试了我的应用程序,发现我的actionbar躲避代码不再工作了。
我有一个透明的ActionBar,overlyMode为true,但是我想在我的一些屏幕上把ActionBar表现得像一个实体的ActionBar。
为了使这个工作,我从蜂巢画廊借了一些代码Code
基本上,我检查acionbar的高度并将android.r.id.content bucket的上边距设置为此值。
public void setupActionbar() {
final int sdkVersion = Build.VERSION.SDK_INT;
int barHeight = getSupportActionBar().getHeight();
if (sdkVersion < Build.VERSION_CODES.HONEYCOMB) {
FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) content.getLayoutParams();
if (params.topMargin != barHeight) {
params.topMargin = barHeight;
content.setLayoutParams(params);
}
if (!getSupportActionBar().isShowing()) {
params.topMargin = 0;
content.setLayoutParams(params);
}
} else {
FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
LayoutParams params = content.getLayoutParams();
if (params instanceof RelativeLayout.LayoutParams) {
android.widget.RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) params;
if (lp.topMargin != barHeight) {
lp.topMargin = barHeight;
content.setLayoutParams(lp);
}
if (!getActionBar().isShowing()) {
lp.topMargin = 0;
content.setLayoutParams(lp);
}
} else if (params instanceof FrameLayout.LayoutParams) {
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) params;
if (lp.topMargin != barHeight) {
lp.topMargin = barHeight;
content.setLayoutParams(params);
}
if (!getActionBar().isShowing()) {
lp.topMargin = 0;
content.setLayoutParams(params);
}
}
}
在果冻豆中,这种策略由于某些原因不再有效。果冻豆改变了身份证内容容器吗?
最佳答案
好的,回答我自己的问题。
首先,我的代码有一个拼写错误:
content.setLayoutParams(params); should read
content.setLayoutParams(lp);
但真正的问题是
FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
提供整个屏幕的视图,包括状态栏。仅在Android 4.1果冻豆上
View content = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
提供需要推送到透明actionbar下的rootcontentview。