Получить группу меню как вид - PullRequest
0 голосов
/ 19 декабря 2018

Я использую 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, но это нацелено как на макет заголовка, так и на меню.Я также пытался получить группу меню по идентификатору (findViewById(R.id.menu_group_id)), но я не думаю, что технически группа меню является View.Я могу получить меню через NavigationView.getMenu(), но это возвращает объект Menu.Любые идеи?

Редактировать: все меню должно быть нацелено.С другой стороны, это NavigationView существует в DrawerLayout, если это что-то меняет.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Нет прямого способа получить ссылку на представление группы меню в NavigationView.Вы можете удалить или скрыть представление заголовка во время выполнения, когда цели NavigationView, и добавить или снова показать представление заголовка, когда цели другие.

вы можете использовать getheaderview , чтобы получить заголовок и вызвать:

your_header.setVisibility(View.GONE)    //hide
your_header.setVisibility(View.VISIBLE) //show
0 голосов
/ 19 декабря 2018

Вы можете получить доступ к элементам меню, используя их как вид действий .Установите 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...