如何使用汉堡菜单添加返回图标?
How to add back icon with hamburger menu?
我正在开发一个应用程序,它需要显示带有汉堡包图标和后退图标的后退图标,如下图所示。
我该如何实现?
唯一的解决方案是创建一个自定义工具栏,您必须在其中手动放置这两个图标(后退按钮和汉堡菜单图标)并在 运行 时实现抽屉功能。
这意味着您必须分别实现后退按钮和汉堡菜单按钮功能。
我建议使用像下面这样的自定义工具栏
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:id="@+id/mImgBack"
android:src="@drawable/ic_back"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:id="@+id/mImgHamburger"
android:src="@drawable/ic_mImgHamburger"
android:layout_height="wrap_content"/>
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
现在将工具栏设置为您的
Toolbar toolbar = (Toolbar) findViewById(R.id.profileToolbar);
setSupportActionBar(toolbar);
然后执行操作并根据需要点击图像视图
我不确定这是否是您正在寻找的解决方案,但如果您实现自定义工具栏(就像其他人提到的那样),您可以使用带 DrawerArrowDrawable 的 ImageView。
然后您可以通过编程方式将图标从汉堡符号转换为箭头,而无需处理多个视图。
您可以像这样初始化 DrawerArrowDrawable:
homeDrawable = DrawerArrowDrawable(context)
homeDrawable.setColor(ContextCompat.getColor(context, R.color.white))
homeDrawable.setBarThickness(dimen(R.dimen.toolbar_home_bars_thickness).toFloat())
homeDrawable.setBarLength(dimen(R.dimen.toolbar_home_bars_length).toFloat())
homeDrawable.setGapSize(dimen(R.dimen.toolbar_home_bars_gap).toFloat())
homeDrawable.setArrowShaftLength(dimen(R.dimen.toolbar_home_arrow_shaft_length).toFloat())
homeDrawable.setArrowHeadLength(dimen(R.dimen.toolbar_home_arrow_head_length).toFloat())
然后将其设置为图像视图的背景:
imageView.setImageDrawable(homeDrawable)
您可以使用像这样的简单动画 (ValueAnimator) 切换图标:
private fun toggleDrawerIcon(show: Boolean) {
val currentProgress = homeDrawable.progress
val animator = ValueAnimator.ofFloat(currentProgress, if (show) 0.0F else 1.0F)
animator.addUpdateListener { valueAnimator ->
var value = valueAnimator.animatedValue
if (value is Float)
homeDrawable?.progress = value
}
animator.duration = 200
animator.start()
}
请记住,无论何时点击图标,您都需要确定图标的当前状态,以确保它会执行所需的操作。
我正在开发一个应用程序,它需要显示带有汉堡包图标和后退图标的后退图标,如下图所示。
我该如何实现?
唯一的解决方案是创建一个自定义工具栏,您必须在其中手动放置这两个图标(后退按钮和汉堡菜单图标)并在 运行 时实现抽屉功能。
这意味着您必须分别实现后退按钮和汉堡菜单按钮功能。
我建议使用像下面这样的自定义工具栏
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:id="@+id/mImgBack"
android:src="@drawable/ic_back"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:id="@+id/mImgHamburger"
android:src="@drawable/ic_mImgHamburger"
android:layout_height="wrap_content"/>
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
现在将工具栏设置为您的
Toolbar toolbar = (Toolbar) findViewById(R.id.profileToolbar);
setSupportActionBar(toolbar);
然后执行操作并根据需要点击图像视图
我不确定这是否是您正在寻找的解决方案,但如果您实现自定义工具栏(就像其他人提到的那样),您可以使用带 DrawerArrowDrawable 的 ImageView。
然后您可以通过编程方式将图标从汉堡符号转换为箭头,而无需处理多个视图。
您可以像这样初始化 DrawerArrowDrawable:
homeDrawable = DrawerArrowDrawable(context)
homeDrawable.setColor(ContextCompat.getColor(context, R.color.white))
homeDrawable.setBarThickness(dimen(R.dimen.toolbar_home_bars_thickness).toFloat())
homeDrawable.setBarLength(dimen(R.dimen.toolbar_home_bars_length).toFloat())
homeDrawable.setGapSize(dimen(R.dimen.toolbar_home_bars_gap).toFloat())
homeDrawable.setArrowShaftLength(dimen(R.dimen.toolbar_home_arrow_shaft_length).toFloat())
homeDrawable.setArrowHeadLength(dimen(R.dimen.toolbar_home_arrow_head_length).toFloat())
然后将其设置为图像视图的背景:
imageView.setImageDrawable(homeDrawable)
您可以使用像这样的简单动画 (ValueAnimator) 切换图标:
private fun toggleDrawerIcon(show: Boolean) {
val currentProgress = homeDrawable.progress
val animator = ValueAnimator.ofFloat(currentProgress, if (show) 0.0F else 1.0F)
animator.addUpdateListener { valueAnimator ->
var value = valueAnimator.animatedValue
if (value is Float)
homeDrawable?.progress = value
}
animator.duration = 200
animator.start()
}
请记住,无论何时点击图标,您都需要确定图标的当前状态,以确保它会执行所需的操作。