【问题标题】:navigation header layout cutoff from top导航标题布局从顶部截断
【发布时间】:2016-05-14 08:21:10
【问题描述】:

我正在使用带有可扩展列表视图的导航视图。我正在以编程方式添加标题布局。但它从顶部切断。如果我将标题布局高度设置为 240dp,它看起来还可以,但在较低版本中它需要很多高度。这是我的标题布局 xml,我将其膨胀为可扩展列表视图的标题。

navigation_header

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="@color/colorPrimary"
              android:gravity="bottom"
              android:orientation="vertical"
              android:paddingBottom="@dimen/activity_vertical_margin"
              android:paddingLeft="@dimen/activity_horizontal_margin"
              android:paddingRight="@dimen/activity_horizontal_margin"
              android:paddingTop="@dimen/activity_vertical_margin"
    >

    <com.lib.CircleImageView
        android:id="@+id/imageViewHeaderPerson"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:src="@android:drawable/sym_def_app_icon"/>

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:text="Android Studio"
        android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
        android:textColor="@color/DEFAULT"/>

    <TextView
        android:id="@+id/textViewCode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/Base.TextAppearance.AppCompat.Body1"
        android:text="heelo"
        android:textColor="@color/DEFAULT"/>

</LinearLayout>

我的导航布局有抽屉

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
           />

    </LinearLayout>
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        >
    <ExpandableListView
        android:groupIndicator="@null"
        android:id="@+id/left_drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:headerDividersEnabled="false"
        android:childDivider="#00000000"


       />
    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

【问题讨论】:

  • 您必须使用 layout_below 属性将导航视图放在工具栏下方
  • 我没有使用工具栏。它是一个动作栏。我在toobar `actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,null,navigationConfig.getDrawerOpenDesc(),navigationConfig.getDrawerCloseDesc())`中提供null`你可以为你所说的编码sn-p

标签: android navigation-drawer


【解决方案1】:

添加您的 NavigationView android:fitsSystemWindows="false"

【讨论】:

  • 完美答案。谢谢
  • 谢谢你,效果很好,真的是完美的答案
【解决方案2】:

在布局中添加操作栏大小的上边距,例如

<ExpandableListView
    android:groupIndicator="@null"
    android:id="@+id/left_drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:headerDividersEnabled="false"
    android:layout_marginTop="?attr/actionBarSize"
    android:childDivider="#00000000"
   />

【讨论】:

  • android:layout_marginTop="?attr/actionBarSize" 但它仅支持 api 11 以上。我使用的是 min 8 api 级别。你知道这个的替代品吗?
【解决方案3】:

我用这个解决了这个问题。感谢您评论设置导航视图下方的toobar。

   // Calculate ActionBar height
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            TypedValue tv = new TypedValue();
            int actionBarHeight = 0;

            if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
                actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources()
                        .getDisplayMetrics());
            }
            ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) expandableListView
                    .getLayoutParams();

            mlp.setMargins(0, actionBarHeight, 0, 0);
            expandableListView.setLayoutParams(mlp);
        }

【讨论】:

    【解决方案4】:

    我在&lt;androidx.drawerlayout.widget.DrawerLayout&gt; 中的&lt;com.google.android.material.navigation.NavigationView&gt; 中添加了android:fitsSystemWindows="false" 属性

    然后手动为&lt;com.google.android.material.navigation.NavigationView&gt;添加一些内边距或边距以正确调整标题位置。

    现在标题在“Notched”和“Non-Notched”显示中保持在相同的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-28
      • 2013-11-03
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多