3

我最近在Jelly Bean設備上測試了我的應用程序,發現我的Actionbar Dodge Code不再工作。Jelly Bean android.R.id.content已更改?

我有一個OverlayMode爲true的透明ActionBar,但想在一些屏幕中像操作欄一樣使用ActionBar。

爲了使這個工作我已經從蜂巢畫廊Code

Basicly借了一些代碼,我檢查Acionbar高度和android.R.id.content桶的TOPMARGIN設置爲這個值。

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); 
      } 
     } 

     } 

在果凍豆這種策略由於某種原因不再工作了。 Jelly Bean是否改變了id.content Container perhabs?

回答

4

好的,回答我自己的問題在這裏。 首先,我在我的代碼一個錯字:

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。

相關問題