当我使用Translucent StatusBar时,如何限制我的活动内容不要低于ActionBar?

时间:2014-06-28 06:26:56

标签: android statusbar

当我使用Translucent StatusBar时,如何限制我的活动内容不会低于ActionBar?我的内容低于ActionBar -.-"

样式(在AppTheme中使用):

<item name="android:windowTranslucentStatus" tools:ignore="NewApi">true</item>
<item name="android:fitsSystemWindows" tools:ignore="NewApi">true</item>

enter image description here


在setContentView:

之后使用此代码解决
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            FrameLayout.LayoutParams params
                    = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
            params.setMargins(0, getStatusBarHeight() + getActionBarHeight(), 0, 0);
            drawer.setLayoutParams(params);

方法:

public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

    public int getActionBarHeight(){
        TypedValue tv = new TypedValue();
        int actionBarHeight = 0;
        if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)){
            actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
        }
        return actionBarHeight;
    }

2 个答案:

答案 0 :(得分:0)

检查样式中的android:windowActionBarOverlay属性并将其设置为false。如果此属性为true,则将绘制活动以使其占据整个屏幕空间,并在活动内容的顶部绘制操作栏。

答案 1 :(得分:0)

在您的布局上,设置属性android:fitsSystemWindows="true"

例如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"

      android:fitsSystemWindows="true">

这将使您的内容适合操作栏和导航栏。 而且你将避免以编程方式设置边距。