ActionBar with support library and Fragments overl

2019-01-21 20:23发布

I added the android-support-library-v7-appcompat to my project to support ActionBar from API level 7 above.

It works like a charm on android 4.0+ and also on android 2.3 with a normal Activity that has setContentView in onCreate, but when the activity is loading an Fragment in onCreate the ActionBar gets overlapped with the content of my layout. At all other scenarios the ActionBar works well.

Here is some code:

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

The theme of this activity is set in the manifest to:

@style/Theme.AppCompat

An this is the result on android 2.3 (on 4.0+ the ActionBar shows well) actionBar overlaping

You can se that the first lisview item is overlaping the ActionBar(White round icon and title "My activity")

It is possible that i found a bug in the support library, it is released only for 2 days now? Thanks to all.

4条回答
我想做一个坏孩纸
2楼-- · 2019-01-21 21:01

Another alternative if you do not want to modify the source code of android-support-library-v7-appcompat is to add an empty layout in the layout xml file such as:

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

and make the fragment call to add to that layout instead:

ft.add(R.id.content_view, mFragment, mTag);
查看更多
何必那么认真
3楼-- · 2019-01-21 21:05

Seems a bit late to contribute but I had the same problem and haven't seen the answer here....

Check your styles.xml file, there might be an xml attribute for overlaying the actionbar set to true ie

true

The whole entry looks something like this

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

If that is the case then just change the value of "windowActionBarOverlay" to false.

查看更多
看我几分像从前
4楼-- · 2019-01-21 21:06

Edit: This is now officially fixed and released in the Support Library v19.

As JJD commented below, you can use normally android.R.id.content with appcompat-v7 r.19.0.0 or newer. The home button works too.

With other words: The workaround below is no more needed if you use version 19.0.0 or newer.


I got the answer at code.google.com. i've made a summary from frederic's answer:

For pre ICS devices you must use:

R.id.action_bar_activity_content

instead of

android.R.id.content

R.id.action_bar_activity_content is a new id used in layout for displaying app content, it would appear that it replace android.R.id.content when you use support v7 appcompat ActionBarActivity.

You can use this code to retrieve the correct id of the activity content :

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

Thanks to frederic

查看更多
祖国的老花朵
5楼-- · 2019-01-21 21:11

Add a extra empty list header with the size of the actionbar. Should be a good workaround.

查看更多
登录 后发表回答