Java 将导航抽屉添加到现有活动
我有一个我正在编写的应用程序,它已经包含了很多代码,我决定要在主活动工具栏上添加一个导航抽屉,但我不知道如何在不创建新的导航抽屉项目并将我的整个项目复制到其中的情况下完成它,这似乎需要做很多工作,是否有向现有项目添加导航抽屉的教程?最简单的方法是使用库 它非常容易实现,而且非常灵活Java 将导航抽屉添加到现有活动,java,android,navigation-drawer,Java,Android,Navigation Drawer,我有一个我正在编写的应用程序,它已经包含了很多代码,我决定要在主活动工具栏上添加一个导航抽屉,但我不知道如何在不创建新的导航抽屉项目并将我的整个项目复制到其中的情况下完成它,这似乎需要做很多工作,是否有向现有项目添加导航抽屉的教程?最简单的方法是使用库 它非常容易实现,而且非常灵活 如果你想自己做,考虑阅读官方关于创建导航抽屉。 < p>创建布局 LayOutLeftx菜单.XML: <?xml version="1.0" encoding="utf-8"?> <Relativ
如果你想自己做,考虑阅读官方关于创建导航抽屉。 < p>创建布局<强> LayOutLeftx菜单.XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bgLeftMenu">
<ImageView android:id="@+id/header"
android:src="@drawable/ic_launcher"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginTop="26dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="30dp"
android:layout_marginStart="40dp"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_marginTop="26dp"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/header">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerInParent="true">
<TextView
android:id="@+id/userName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textColor="@color/pressed"/>
<TextView
android:id="@+id/userEmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:layout_below="@id/userName"
android:layout_centerInParent="true"
android:textColor="@color/pressed"
android:visibility="gone"/>
</LinearLayout>
</RelativeLayout>
<ListView android:id="@+id/menu_items_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/header"
android:dividerHeight="0dp"
android:divider="@null"
android:background="@color/bgLeftMenu"/>
<ProgressBar android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone"/>
</RelativeLayout>
设置onclick侦听器。您可以根据id执行以下操作:
mLeftMenuView.setmListener(new OnClickMenu() {
@Override
public void onClick(String id) {
Log.d("MENU", "ic_menu_hamburger clicked: " + id);
closeDrawer(null);
if (id.equals(getString(R.string.settings_id))) {
Intent intent = new Intent(MainActivity.this,
SettingsActivity.class);
MainActivity.this.startActivity(intent);
} else if (id.equals(getString(R.string.exit_id))) {
// salir
showRateDialogBeforeExit();
}
}
});
我已在单击菜单时创建了自己的界面:
public interface OnClickMenu {
void onClick(String id);
}
并添加从菜单图标打开抽屉的操作:
@Override
public void onBackPressed() {
if((mDrawerLayout) != null && (mDrawerLayout.isDrawerOpen(GravityCompat.START)))
closeDrawer(null);
else {
super.onBackPressed();
}
}
public void closeDrawer(DrawerLayout.DrawerListener listener) {
mDrawerLayout.setDrawerListener(listener);
mDrawerLayout.closeDrawers();
}
public void openDrawer() {
mDrawerLayout.setDrawerListener(null);
mDrawerLayout.openDrawer(GravityCompat.START);
}
菜单:
添加到app build.gradle
compile 'com.android.support:design:26.0.0'
compile 'com.jakewharton:butterknife:8.6.0'
将所有@Bind更改为@BindView我已经尝试了MaterialDrawer库,正如@yury dombaev所建议的,我不得不承认它比官方导航抽屉更容易实现 可以使用Android X依赖项或普通依赖项实现 在我的情况下,因为我有正常的,我必须坚持使用MaterialDrawer 6.0.9v。虽然有一个迁移指南,我会看一看 要在当前活动中实现库,请执行以下操作:
活动的onCreate
()方法中添加抽屉:新建抽屉生成器().withActivity(this.build()代码>
为什么会被否决?完全正确的问题。@PrimožKralj也是我的问题。很抱歉,在我开始修改活动时,我已将自定义视图的名称从SimpleLeftMenuView更改为LeftMenuView。我刚刚编辑了代码单击按钮时如何显示和隐藏抽屉?在我的回答的第二步,存储调用build方法的结果,然后调用
openDrawer()
或closeDrawer()
方法
mLeftMenuView.setmListener(new OnClickMenu() {
@Override
public void onClick(String id) {
Log.d("MENU", "ic_menu_hamburger clicked: " + id);
closeDrawer(null);
if (id.equals(getString(R.string.settings_id))) {
Intent intent = new Intent(MainActivity.this,
SettingsActivity.class);
MainActivity.this.startActivity(intent);
} else if (id.equals(getString(R.string.exit_id))) {
// salir
showRateDialogBeforeExit();
}
}
});
public interface OnClickMenu {
void onClick(String id);
}
@Override
public void onBackPressed() {
if((mDrawerLayout) != null && (mDrawerLayout.isDrawerOpen(GravityCompat.START)))
closeDrawer(null);
else {
super.onBackPressed();
}
}
public void closeDrawer(DrawerLayout.DrawerListener listener) {
mDrawerLayout.setDrawerListener(listener);
mDrawerLayout.closeDrawers();
}
public void openDrawer() {
mDrawerLayout.setDrawerListener(null);
mDrawerLayout.openDrawer(GravityCompat.START);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_home, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
openDrawer();
return true;
}
return super.onOptionsItemSelected(item);
}
compile 'com.android.support:design:26.0.0'
compile 'com.jakewharton:butterknife:8.6.0'