【问题标题】:How to stop Android navigation drawer from opening automatically?如何阻止Android导航抽屉自动打开?
【发布时间】:2016-06-10 20:52:35
【问题描述】:

如何阻止我的 Android 应用中的导航抽屉自动打开?

它曾经工作得很好。起初看不见,并且能够被刷入可见度。但我需要一个标题。起初它只是一个 ListView。在修改抽屉 xml(见下文)以在列表视图上方为其赋予标题后不久,它开始自动打开。我当然没有在代码中添加任何东西,比如 my_nav_drawer.openOnStartup()。

<!-- The navigation drawer -->
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- The main content view -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/ail_background_gradient"
    tools:context="com.allinlearning.assist_android.HomeScreenActivityFragment">

    <ImageView
        android:id="@+id/imgViewLogo"
        android:src="@drawable/ail_logo"
        android:layout_margin="10dp"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:scaleType="fitXY"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="ALL In Learning"
        android:id="@+id/textViewLogo"
        android:layout_margin="10dp"
        android:layout_below="@+id/imgViewLogo"
        android:layout_centerHorizontal="true"
        android:textSize="@dimen/font_size26"
        android:textStyle="bold" />

    <ImageButton
        android:id="@+id/imgBtnGradeAssessment"
        android:src="@drawable/grade_assessment"
        android:layout_width="100dp"
        android:layout_height="95dp"
        android:scaleType="fitXY"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/textViewGradeAssessment"
        android:layout_toStartOf="@+id/textViewGradeAssessment" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Grade"
        android:id="@+id/textViewGradeAssessment"
        android:textColor="@color/white"
        android:textSize="@dimen/font_size28"
        android:layout_centerVertical="true"
        android:layout_alignRight="@+id/imgViewLogo"
        android:layout_alignEnd="@+id/imgViewLogo" />

    <ImageButton
        android:id="@+id/imgBtnPrivateData"
        android:src="@drawable/two_clickers"
        android:layout_width="100dp"
        android:layout_height="95dp"
        android:scaleType="fitXY"
        android:layout_below="@+id/imgBtnGradeAssessment"
        android:layout_alignLeft="@+id/imgBtnGradeAssessment"
        android:layout_alignStart="@+id/imgBtnGradeAssessment" />


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Private Data"
        android:id="@+id/textViewPrivateData"
        android:textColor="@color/white"
        android:textSize="@dimen/font_size28"
        android:layout_alignBottom="@+id/imgBtnPrivateData"
        android:layout_toRightOf="@+id/imgBtnPrivateData"
        android:layout_toEndOf="@+id/imgBtnPrivateData"
        android:layout_marginBottom="40dp" />

</RelativeLayout>

<TextView
    android:layout_width="240dp"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="I AM THE TITLE"
    android:id="@+id/tvDrawerTitle"
    android:layout_margin="10dp"
    android:layout_centerHorizontal="true"
    android:textSize="@dimen/font_size26"
    android:textStyle="bold"
    android:textAlignment="center"
    android:textColor="@color/black" />

<ListView
    android:id="@+id/lvDrawerItems"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="left"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="@color/white" />

突发新闻:

我已经在上面的 XML 中验证了原因。我只是将导航抽屉 XML 恢复为 ListView 本身...

<!-- The navigation drawer -->
<ListView
    android:id="@+id/lvDrawerItems"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="left"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="@color/white" />

...它不再自动打开。看起来和工作正常。我的目标是添加一个 TextView 标题,而不会导致抽屉在启动时打开。

【问题讨论】:

  • 看看here
  • 查看doc 关于主抽屉和抽屉的位置,以及 android:layout_gravity="start" 属性。
  • @Mike 这确实是正确的答案。既然你是第一个,为什么不在这里给出正确的答案,以便我可以标记给其他人。谢谢solosodium。

标签: android navigation-drawer xml-layout


【解决方案1】:

并不是你的抽屉会自动打开。那是DrawerLayout 没有找到View 用作抽屉,所以它的两个直接子Views 都在填充它。 LinearLayout 本来是抽屉,在最后列出,覆盖了 View 的内容,所以看起来抽屉是打开的。

DrawerLayout 通过在其直接子代中查找具有水平 layout_gravity 设置的Views 来确定将哪个Views 用作抽屉;即left/right,或start/end。您希望在LinearLayout 上设置此属性,因为它现在充当抽屉。在您的主布局中,只需将 android:layout_gravity="left"ListView 移动到 LinearLayout

【讨论】:

  • 就是这样。谢谢。又一个糟糕的复制粘贴错误
猜你喜欢
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多