导航抽屉强制关闭 activity,如何解决?
Navigation drawer force close from activity, how to fix it?
我有一个导航抽屉放在主 activity 上,但是当我打开 activity 主时,应用程序立即强制关闭。
我将抽屉布局属性与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="match_parent"
android:layout_height="match_parent"
tools:context=".UtamaActivity"
android:layoutDirection="locale">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
...
<ImageButton
android:id="@+id/btn_nav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_menu"
android:background="@android:color/transparent"
android:layout_margin="15dp" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
app:headerLayout="@layout/header_nav"
app:menu="@menu/nav_menu" />
...
</RelativeLayout>
</androidx.drawerlayout.widget.DrawerLayout>
我使用上面的图像按钮以编程方式打开抽屉布局。
drawerLayout = findViewById(R.id.drawer_layout);
findViewById(R.id.btn_nav).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
drawerLayout.openDrawer(GravityCompat.START);
drawerLayout.closeDrawer(GravityCompat.START);
}
});
这是一个管理抽屉布局使用的程序,我用图片按钮打开了抽屉布局,但是我发现的问题是,我没有进入主activity,我的应用程序强制关闭,我该如何解决这个问题?
问题的根源在于 NavigationView
标签上缺少 android:layout_gravity
属性,因此请尝试以下操作
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_gravity = "start"
...
... />
<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/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutDirection="locale">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<ImageButton
android:id="@+id/btn_nav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_menu"
android:background="@android:color/transparent"
android:layout_margin="15dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/white"
app:itemIconTint="@color/white"
app:itemTextColor="@color/text_dark"
app:menu="@menu/activity_main2_drawer">
</com.google.android.material.navigation.NavigationView>
//使用此代码获取抽屉是否打开
drawerLayout = findViewById(R.id.drawer_layout);
findViewById(R.id.btn_nav).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (drawerLayout .isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START)
} else {
drawerLayout.openDrawer(GravityCompat.START)
}
}
});
您正在同时打开和关闭抽屉,在您的代码中:
public void onClick(View view) {
drawerLayout.openDrawer(GravityCompat.START);
drawerLayout.closeDrawer(GravityCompat.START);
}
您先调用drawerLayout.openDrawer(GravityCompat.START);
,然后立即调用drawerLayout.closeDrawer(GravityCompat.START);
,当程序运行时,这将打开抽屉并立即关闭抽屉。
您只需从上面的代码中删除 drawerLayout.closeDrawer(GravityCompat.START);
。
我有一个导航抽屉放在主 activity 上,但是当我打开 activity 主时,应用程序立即强制关闭。
我将抽屉布局属性与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="match_parent"
android:layout_height="match_parent"
tools:context=".UtamaActivity"
android:layoutDirection="locale">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
...
<ImageButton
android:id="@+id/btn_nav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_menu"
android:background="@android:color/transparent"
android:layout_margin="15dp" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
app:headerLayout="@layout/header_nav"
app:menu="@menu/nav_menu" />
...
</RelativeLayout>
</androidx.drawerlayout.widget.DrawerLayout>
我使用上面的图像按钮以编程方式打开抽屉布局。
drawerLayout = findViewById(R.id.drawer_layout);
findViewById(R.id.btn_nav).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
drawerLayout.openDrawer(GravityCompat.START);
drawerLayout.closeDrawer(GravityCompat.START);
}
});
这是一个管理抽屉布局使用的程序,我用图片按钮打开了抽屉布局,但是我发现的问题是,我没有进入主activity,我的应用程序强制关闭,我该如何解决这个问题?
问题的根源在于 NavigationView
标签上缺少 android:layout_gravity
属性,因此请尝试以下操作
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_gravity = "start"
...
... />
<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/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutDirection="locale">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<ImageButton
android:id="@+id/btn_nav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_menu"
android:background="@android:color/transparent"
android:layout_margin="15dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/white"
app:itemIconTint="@color/white"
app:itemTextColor="@color/text_dark"
app:menu="@menu/activity_main2_drawer">
</com.google.android.material.navigation.NavigationView>
//使用此代码获取抽屉是否打开
drawerLayout = findViewById(R.id.drawer_layout);
findViewById(R.id.btn_nav).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (drawerLayout .isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START)
} else {
drawerLayout.openDrawer(GravityCompat.START)
}
}
});
您正在同时打开和关闭抽屉,在您的代码中:
public void onClick(View view) {
drawerLayout.openDrawer(GravityCompat.START);
drawerLayout.closeDrawer(GravityCompat.START);
}
您先调用drawerLayout.openDrawer(GravityCompat.START);
,然后立即调用drawerLayout.closeDrawer(GravityCompat.START);
,当程序运行时,这将打开抽屉并立即关闭抽屉。
您只需从上面的代码中删除 drawerLayout.closeDrawer(GravityCompat.START);
。