使用SystemBarTint时,My Fragment与ActionBar Tabs重叠

时间:2014-05-22 10:13:08

标签: android android-fragments android-listview

好的,快速背景:我一直在开发一个简单的音乐播放器应用程序并增强用户体验(特别是在新设备上)我决定使用传说中的SystemBarTint library来实现一个有色的StatusBar。 / p>

导入了.JAR,按照使用说明,修改了应用程序主题并瞧!我的应用看起来比10岁的自行车更漂亮。 但等等,还有更多!

enter image description here

正如您所看到的,ListView及其标签现在涵盖了ActionBar。我完成了我的作业并找到了this解决方法 - 哪种方法有效。

enter image description here

我的ListView不再由ActionBar 涵盖,但标签仍然涵盖了这些内容!

如何对此进行排序?

这是我的BaseActivity onCreate方法,用于激活SystemBarTint库:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SystemBarTintManager tintManager = new SystemBarTintManager(this);

    tintManager.setStatusBarTintEnabled(true);
    tintManager.setTintColor(getResources().getColor(R.color.wowza_orange));
} 

..这是我的Fragment(包含ListView)中提供的解决方法:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

     musicList.setClipToPadding(false); // musicList is my ListView instance.
     setInsets(getActivity(), (View) musicList);
}

public static void setInsets(Activity context, View view) {

    SystemBarTintManager tintManager = new SystemBarTintManager(context);
    SystemBarTintManager.SystemBarConfig config = tintManager.getConfig();

    view.setPadding(0, config.getPixelInsetTop(true),
            config.getPixelInsetRight(), config.getPixelInsetBottom());
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

有点晚了,但我遇到了同样的问题。我的解决方案是添加此方法:

private int getActionBarHeight() {
    int actionBarHeight =0;
    final TypedValue tv = new TypedValue();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
            actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
    } else if (context.getTheme().resolveAttribute(R.attr.actionBarSize, tv, true))
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
    return actionBarHeight;
}

并替换:

view.setPadding(0, config.getPixelInsetTop(true),
        config.getPixelInsetRight(), config.getPixelInsetBottom());

使用:

view.setPadding(0, config.getPixelInsetTop(true) + getActionBarHeight(),
        config.getPixelInsetRight(), config.getPixelInsetBottom());