Android 用图标构建迷你导航抽屉
Android build mini navigation drawer with Icons
我想在 android 中构建一个固定的迷你导航抽屉。将始终可见且不可扩展,仅带有图标。
类似于 https://github.com/mikepenz/MaterialDrawer 迷你抽屉。
我尝试使用他的库,但我不知道如何修复它。
这是我的代码:
private Drawer result = null;
private MiniDrawer miniResult = null;
result = new DrawerBuilder()
.withActivity(this)
.withToolbar(toolbar)
.withTranslucentStatusBar(false)
.addDrawerItems(
new PrimaryDrawerItem().withName("1").withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),
new PrimaryDrawerItem().withName("2").withIcon(FontAwesome.Icon.faw_home).withBadge("22").withBadgeStyle(new BadgeStyle(Color.RED, Color.RED)).withIdentifier(2).withSelectable(false),
new DividerDrawerItem(),
new ToggleDrawerItem().withName("3").withIcon(FontAwesome.Icon.faw_home).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener)
) // add the items we want to use with our Drawer
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
if (drawerItem instanceof Nameable) {
Toast.makeText(MainActivity.this, ((Nameable) drawerItem).getName().getText(MainActivity.this), Toast.LENGTH_SHORT).show();
}
return false;
}
})
.withGenerateMiniDrawer(true)
.withSavedInstance(savedInstanceState)
// build only the view of the Drawer (don't inflate it automatically in our layout which is done with .build())
.buildView();
miniResult = result.getMiniDrawer();
View view = miniResult.build(this);
在该库的文档中,开发人员提到您可以 lock the drawer。你能试试看它是否会阻止它打开吗?
result = new DrawerBuilder()...
...
//get the DrawerLayout from the Drawer
DrawerLayout drawerLayout = result.getDrawerLayout();
//do whatever you want with the Drawer. Like locking it.
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
如果 LOCK_MODE_CLOSED 不起作用,请尝试定义 here 的其他锁定模式,并告诉我们发生了什么!
您可以像这样为您的抽屉创建视图,尝试使用ActionsContentView
<shared.ui.actionscontentview.ActionsContentView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/divider"
app:actions_layout="@layout/actions"
app:actions_spacing="0dp"
app:content_layout="@layout/content"
app:shadow_drawable="@drawable/shadow"
app:shadow_width="8dip"
app:spacing="64dip"
app:spacing_type="right_offset" />
正常使用时总是有 "normal" 抽屉(通过 DrawerLayout
),而 MiniDrawer
在你的情况下你只想使用 MiniDrawer
并将其添加到您的 View
层次结构中。
正如您已经正确理解的那样,MiniDrawer
是通过正常的 DrawerBuilder
填充的,因为它附带了与添加到抽屉中的元素进行交互的所有方法。
由于您的用例很特殊,所以没有 "out-of-the-box" 单独膨胀 MiniDrawer
。
所以你有上面MiniDrawer
的View
。您现在只需将它添加到您的 Activity
.
我建议您的布局如下所示:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Place your content here -->
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
所以在你的代码中你得到 "container"
LinearLayout container = (LinearLayout) findViewById(R.id.container);
container.addView(view, 0); //view is the view of your MiniDrawer
只是为了改进您的代码并删除不必要的东西。您可以删除
.withToolbar(toolbar)
.withTranslucentStatusBar(false)
因为如果您只使用 MiniDrawer
,则不需要这些
我想在 android 中构建一个固定的迷你导航抽屉。将始终可见且不可扩展,仅带有图标。
类似于 https://github.com/mikepenz/MaterialDrawer 迷你抽屉。 我尝试使用他的库,但我不知道如何修复它。
这是我的代码:
private Drawer result = null;
private MiniDrawer miniResult = null;
result = new DrawerBuilder()
.withActivity(this)
.withToolbar(toolbar)
.withTranslucentStatusBar(false)
.addDrawerItems(
new PrimaryDrawerItem().withName("1").withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),
new PrimaryDrawerItem().withName("2").withIcon(FontAwesome.Icon.faw_home).withBadge("22").withBadgeStyle(new BadgeStyle(Color.RED, Color.RED)).withIdentifier(2).withSelectable(false),
new DividerDrawerItem(),
new ToggleDrawerItem().withName("3").withIcon(FontAwesome.Icon.faw_home).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener)
) // add the items we want to use with our Drawer
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
if (drawerItem instanceof Nameable) {
Toast.makeText(MainActivity.this, ((Nameable) drawerItem).getName().getText(MainActivity.this), Toast.LENGTH_SHORT).show();
}
return false;
}
})
.withGenerateMiniDrawer(true)
.withSavedInstance(savedInstanceState)
// build only the view of the Drawer (don't inflate it automatically in our layout which is done with .build())
.buildView();
miniResult = result.getMiniDrawer();
View view = miniResult.build(this);
在该库的文档中,开发人员提到您可以 lock the drawer。你能试试看它是否会阻止它打开吗?
result = new DrawerBuilder()...
...
//get the DrawerLayout from the Drawer
DrawerLayout drawerLayout = result.getDrawerLayout();
//do whatever you want with the Drawer. Like locking it.
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
如果 LOCK_MODE_CLOSED 不起作用,请尝试定义 here 的其他锁定模式,并告诉我们发生了什么!
您可以像这样为您的抽屉创建视图,尝试使用ActionsContentView
<shared.ui.actionscontentview.ActionsContentView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/divider"
app:actions_layout="@layout/actions"
app:actions_spacing="0dp"
app:content_layout="@layout/content"
app:shadow_drawable="@drawable/shadow"
app:shadow_width="8dip"
app:spacing="64dip"
app:spacing_type="right_offset" />
正常使用时总是有 "normal" 抽屉(通过 DrawerLayout
),而 MiniDrawer
在你的情况下你只想使用 MiniDrawer
并将其添加到您的 View
层次结构中。
正如您已经正确理解的那样,MiniDrawer
是通过正常的 DrawerBuilder
填充的,因为它附带了与添加到抽屉中的元素进行交互的所有方法。
由于您的用例很特殊,所以没有 "out-of-the-box" 单独膨胀 MiniDrawer
。
所以你有上面MiniDrawer
的View
。您现在只需将它添加到您的 Activity
.
我建议您的布局如下所示:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Place your content here -->
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
所以在你的代码中你得到 "container"
LinearLayout container = (LinearLayout) findViewById(R.id.container);
container.addView(view, 0); //view is the view of your MiniDrawer
只是为了改进您的代码并删除不必要的东西。您可以删除
.withToolbar(toolbar)
.withTranslucentStatusBar(false)
因为如果您只使用 MiniDrawer