半透明导航栏,增加了布局边距

时间:2014-08-10 16:56:07

标签: android android-4.4-kitkat navigationbar

我正在尝试在应用中实现半透明导航栏。布局看起来很好:

enter image description here

当我添加以下代码行时会出现问题:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                Window w = getActivity().getWindow(); // in Activity's onCreate() for instance
                w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            }

我的布局突然看起来像这样:

enter image description here

请注意,我使用的是android:fitsSystemWindows =" true"在textview上,否则它会在操作栏下滑动。这是我布局的一部分:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    android:layout_alignParentTop="true"
    android:gravity="center_vertical"
    android:layout_marginBottom="10dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="20dp"
    android:textSize="15sp"
    android:id="@+id/missions_summary"
    android:text="@string/downloading"/>
<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    android:layout_alignParentRight="true"
    android:id="@+id/loading"/>
<View style="@style/Divider_h"
    android:layout_below="@id/missions_summary"
    android:id="@+id/top_divider"
    />
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/top_divider"
    android:id="@+id/layout_power"
    android:layout_margin="5dp">
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/power_users"/>

......等等

有谁知道为什么会发生这种情况或者如何阻止它(当然不是使用半透明导航栏)?

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

  1. 获取状态栏高度:
  2. int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    statusBarHeight = getResources().getDimensionPixelSize(resourceId);

    2.将高度设置为填充/边缘到内容视图(android.R.id.content)。

答案 1 :(得分:0)

感谢Nikola,我被放到了正确的轨道上(至少在程序上,我希望有一种更简单的方法)。

This所以回答帮助我获得了ActionBar的高度。

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        Window w = getActivity().getWindow(); // in Activity's onCreate() for instance
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    int statusBarHeight = getResources().getDimensionPixelSize(resourceId);
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (getActivity().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }

    ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) rootView.getLayoutParams();
    params.topMargin = statusBarHeight + actionBarHeight + params.topMargin;
    rootView.requestLayout();