【问题标题】:Navigation View is not inside toolbar [duplicate]导航视图不在工具栏内[重复]
【发布时间】:2019-12-11 21:08:40
【问题描述】:

我遇到了一个奇怪的问题。我在抽屉布局中创建了一个导航视图,但是导航视图在活动开始后才可见。工具栏汉堡菜单不可点击。

main_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="navigation_view"
    >
    <group android:checkableBehavior="single">
    <item android:id="@+id/menu_explore" android:title="@string/explore"
        android:icon="@drawable/exploreicon" />

    <item android:id="@+id/menu_profile" android:title="@string/profile"
        android:icon="@drawable/profileicon"/>

    <item android:id="@+id/menu_search" android:title="@string/search"
        android:icon="@drawable/searchicon"/>

    <item android:id="@+id/menu_settings" android:title="@string/settings"
        android:icon="@drawable/settingsicon"/>

    <item android:id="@+id/menu_bookmarked" android:title="@string/bookmarked"
        android:icon="@drawable/bookmarkicon"/>

    <item android:id="@+id/menu_logout" android:title="@string/log_out"
        android:icon="@drawable/logouticon"/>

    </group>
</menu>

activity_main.xml

<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawerLayout"
    android:layout_width="250dp"
    android:layout_height="match_parent"
    android:layout_marginTop="?attr/actionBarSize"
    android:layout_gravity="start"
    android:clickable="false"
    android:clipToPadding="false"
    android:fitsSystemWindows="true"
    android:padding="16dp"
    android:scrollIndicators="start"
    android:visibility="visible"
    tools:openDrawer="start">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/mainToolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:elevation="4dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </com.google.android.material.appbar.AppBarLayout>


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


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

    </LinearLayout>


    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="#FFF"
        app:headerLayout="@layout/menu_header"
        app:itemIconTint="#6b6b6b"
        app:itemTextColor="#6b6b6b"
        app:menu="@menu/main_menu">

    </com.google.android.material.navigation.NavigationView>

</androidx.drawerlayout.widget.DrawerLayout>

主要活动的风格:

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
    </style>

主要活动:

public class MainActivity extends AppCompatActivity {

    private DrawerLayout drawerLayout;
    private ActionBarDrawerToggle actionBarDrawerToggle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = findViewById(R.id.mainToolbar);
        toolbar.setTitle(R.string.app_name);
        setSupportActionBar(toolbar);
        drawerLayout = findViewById(R.id.drawerLayout);
        actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,
                R.string.open,R.string.close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
    }
}

我希望导航视图仅在单击工具栏中的汉堡图标时可见。我遵循的每个教程都对我做了同样的事情,但是我的没有显示在工具栏中。

【问题讨论】:

  • 是刷开抽屉吗?
  • 您缺少&lt;NavigationView&gt; 上的layout_gravity 属性;例如,android:layout_gravity="start|left"&lt;DrawerLayout&gt; 上没有,如果这就是你在那里的原因。
  • 是的,layout_gravity 是问题所在。谢谢迈克。
  • 没问题。不过,我误读了您的 ActionBarDrawerToggle 构造函数调用,因此您必须要么在那里传递 Toolbar,要么覆盖 ActivityonOptionsItemSelected() 方法,如最后一个链接副本所示。对不起。干杯!

标签: java android


【解决方案1】:

在启动ActionBarDrawerToggle 期间传递toolbar 实例

actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout, toolbar, R.string.open,R.string.close);

【讨论】:

  • 感谢您的回答,layout_gravity 属性是问题所在。
  • layout_gravity 修复点击问题了吗?
  • 不知何故,确实如此。我猜如果没有 layout_gravity 菜单不在工具栏内,所以它是空的。
  • 更新:我还必须在构造函数中传递工具栏。
  • 是的,我也这么认为
猜你喜欢
  • 2018-11-04
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 2016-03-06
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多