16

我在我的项目中添加了android-support-library-v7-appcompat以支持上述API级别7的ActionBar。带支持库和片段覆盖内容的ActionBar

它的工作原理类似于Android 4.0+上的魅力,也是在android 2.3上的一个普通的Activity,它在onCreate中具有setContentView,但是当活动在onCreate中加载片段时,ActionBar会与我的布局的内容重叠。在所有其他情况下,ActionBar运行良好。

下面是一些代码:

class AssetsActivity extends ActionBarActivity{ 
    @Override 
    protected void onCreate(Bundle arg0) 
    { 
     super.onCreate(arg0); 

     OpenLocalFragment assets = OpenLocalFragment.newInstance(index); 
      assets.setArguments(getIntent().getExtras()); 
     getSupportFragmentManager().beginTransaction() 
        .add(android.R.id.content, assets).commit(); 
    } 
} 

本次活动的主题是在清单中设置为:

@风格/ Theme.AppCompat

的是这样的结果在Android 2.3(在4.0+的ActionBar很好地展示) actionBar overlaping

您可以瑟第一lisview项目overlaping的动作条(白色圆形图标和标题“我的活动”)

这可能是我发现在支持库中的错误,现在仅发布2天? 感谢所有。

+0

问题解决了,请参阅下面的答案。 – Primoz990

回答

18

编辑: 此现已正式固定,并在支持库V19释放。

正如下面JJD评论,你可以正常使用android.R.id.content程序兼容性-V7 r.19.0.0或更高版本。主页按钮也起作用。

换句话说:如果您使用19.0.0或更新版本,则不再需要以下解决方法。


我在code.google.com得到了答案。我做了从弗雷德里克的回答摘要:

对于预ICS设备必须使用:

R.id.action_bar_activity_content

,而不是

android.R .id.content

R.id.action_bar_activity_content是用于显示应用程序内容的布局中使用的新ID,当您使用支持v7 appcompat ActionBarActivity时,它看起来会代替android.R.id.content。

您可以使用此代码检索活动内容的正确ID:

public static int getContentViewCompat() { 
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ? 
       android.R.id.content : R.id.action_bar_activity_content; 
} 

感谢弗雷德里克

+1

注意:这现在正式成为Android中的一个错误。他们修好了它,将来会被释放。 https://code.google.com/p/android/issues/detail?id=58108 – Primoz990

+2

请注意,使用appcompat-v7 r.19.0.0引入了一个[影响正在运行Android 2.3.x的设备的新bug #59077](https://code.google.com/p/android/issues/detail?id=59077)。 – JJD

+1

除了Primoz990答案:如果您使用** appcompat-v7 r.19.0.0或更新**,则可以使用'android.R.id.content'。 Chris Banes [修复了问题59077](https://code.google.com/p/android/issues/detail?id=59077#c8),所以主页按钮在Android 2.3和更新的版本上工作。您不再需要引用'R.id.action_bar_activity_content'的解决方法。 – JJD

0

使用操作栏的大小添加一个额外的空列表标题。应该是一个很好的解决方法。

+0

在这种情况下,这是一个简单的解决方法,但我在不同布局的许多活动中使用这个principe。我将用我当前的解决方法发布编辑。无论如何,谢谢,可能是某人的解决方案。 – Primoz990

1

另一种选择,如果你不想修改Android的支持源代码-library-V7-程序兼容性是在布局xml文件添加一个空的布局,例如:

<LinearLayout 
    android:id="@+id/content_view" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

和MAK E中的片段呼叫添加到布局来代替:

ft.add(R.id.content_view, mFragment, mTag); 
1

晚了点贡献,但我有同样的问题,并没有看到答案这里....

检查您的风格。 xml文件,有可能是一个XML属性将用于叠加的动作条设置为true,即

真正

整个项目看起来像这样

<item name ="actionBarTabTextStyle" > @style/TabTextStyle</item> 
    <item name = "windowActionBarOverlay">true</item> 

如果是则只是“windowActionBarOverlay”的值更改为假的情况。