AndroidX:DrawerLayout不能与LinearLayout一起用作抽屉视图

时间:2019-09-17 14:08:05

标签: android androidx

我正在使用AndroidX,并尝试将LinearLayout用作抽屉的容器。

我的布局XML如下:

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

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark" />

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />

</LinearLayout>

<LinearLayout
    android:id="@+id/drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="left"
    android:background="#FF0000">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Menu item" />
</LinearLayout>

我的代码如下:

public class MainActivity extends AppCompatActivity implements
                                    NavigationView.OnNavigationItemSelectedListener {
    public Toolbar toolbar;

    public DrawerLayout drawerLayout;

    public NavController navController;

    public NavigationView navigationView;

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

        setupNavigation();

    }

    // Setting Up One Time Navigation
    private void setupNavigation() {

        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        drawerLayout = findViewById(R.id.drawer_layout);

        navController = Navigation.findNavController(this, R.id.nav_host_fragment);

        NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout);
    }

}

此代码有两个问题:

  1. 抽屉视图(LinearLayout)填充整个视图,并且不会折叠
  2. 如果您点击工具栏上的后退按钮,并显示错误消息“找不到重力向左的抽屉视图”,则应用程序将崩溃

此代码大多数来自示例应用程序,默认情况下它具有用于抽屉的NavigationView,但是将其切换为LinearLayout会导致问题。为什么?

1 个答案:

答案 0 :(得分:0)

我的属性为android:gravity="left",而不是android:layout_gravity="left"

脸掌。