我正在使用MaterialShowcaseView向用户提供我的应用程序概述。为展示设置目标,它必须是View
。下面是一个序列示例:
String SHOWCASE_ID = getString(R.string.showcase_id);
ShowcaseConfig config = new ShowcaseConfig();
config.setDelay(500); // half second between each showcase view
MaterialShowcaseSequence sequence = new MaterialShowcaseSequence(this, SHOWCASE_ID);
sequence.setConfig(config);
...
sequence.addSequenceItem(
new MaterialShowcaseView.Builder(this)
.setTarget(findViewById(R.id.navigation_header))
.setDismissText(getString("GOT IT"))
.setTitleText(getString(R.string.onboarding_navigation_header_title))
.setContentText(getString(R.string.onboarding_navigation_header_content))
.withRectangleShape(false)
.build());
...
sequence.start();
在此示例中,我定位到以下NavigationView
的导航标题:
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/main_navigation"
app:headerLayout="@layout/nav_header"/>
如何将上面的菜单中的菜单作为View
获取,以便我可以将其传递到setTarget()
中进行展示?
我尝试仅使用NavigationView
,但这既针对标头布局又针对菜单。我也尝试过按ID(findViewById(R.id.menu_group_id)
)获取菜单组,但我不认为菜单组从技术上讲是View
。我可以通过NavigationView.getMenu()
获取菜单,但是返回一个Menu
对象。有什么想法吗?
编辑:整个菜单需要确定目标。附带说明,NavigationView
存在于DrawerLayout
中(如果发生任何更改)。
答案 0 :(得分:1)
没有直接方法可以在NavigationView中获取菜单组的视图参考。您可以remove或在运行时将NavigationView作为目标隐藏标题视图,add或在将其作为其他目标时再次显示标题视图。
您可以使用getheaderview来获取标题并调用:
your_header.setVisibility(View.GONE) //hide
your_header.setVisibility(View.VISIBLE) //show
答案 1 :(得分:0)
您可以将菜单项用作action views来访问菜单项。像这样在您的actionViewClass
中设置menu.xml
:
<item
...
app:actionViewClass="android.support.design.widget.NavigationView"
/>
然后在您的活动中:
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
...
sequence.addSequenceItem(
new MaterialShowcaseView.Builder(this)
.setTarget(findViewById(R.id.navigation_header))
.setDismissText(getString("GOT IT"))
.setTitleText(getString(R.string.onboarding_navigation_header_title))
.setContentText(getString(R.string.onboarding_navigation_header_content))
.withRectangleShape(false)
.build());
...
return true;
}