Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 半透明导航栏,增加布局边距_Android_Android 4.4 Kitkat_Navigationbar - Fatal编程技术网

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

Android 半透明导航栏,增加布局边距,android,android-4.4-kitkat,navigationbar,Android,Android 4.4 Kitkat,Navigationbar,我正在尝试在应用程序中实现半透明的导航栏。在以下情况下,布局看起来很好: 添加以下代码行时会出现问题: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window w = getActivity().getWindow(); // in Activity's onCreate() for instance w.setFlags(WindowManager

我正在尝试在应用程序中实现半透明的导航栏。在以下情况下,布局看起来很好:

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

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);
            }
我的布局突然变成这样:

请注意,我在textview上使用的是android:fitsystemwindows=“true”,否则它会滑到操作栏下。以下是我布局的一部分:

<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"/>


……等等

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

尝试以下方法:

  • 获取状态栏高度:
  • int resourceId=getResources().getIdentifier(“状态栏高度”、“尺寸”、“安卓”);
    statusBarHeight=getResources().getDimensionPixelSize(resourceId)


    2.将内容视图的高度设置为padding/marging(
    android.R.id.content
    )。

    多亏了尼古拉,我走上了正确的轨道(至少在编程方面,我希望有一种更简单的方法)

    所以答案帮助我获得了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();
    

    很接近,这让我找到了正确的答案!基本上,我还必须考虑ActionBar和原始保证金。完整代码见我的答案。@easycheese Cool,别忘了接受你自己的答案。:)谢谢,不过48小时内不行。谁知道呢,也许有人会给出更好的答案。
      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();