我最近在一个果冻豆设备上测试了我的应用程序,发现我的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。

10-08 03:04