Как получить выбранную строку вкладки в BottomNavigationView, как в TabLayout? - PullRequest
2 голосов
/ 30 марта 2019

Я пытаюсь показать строку под выбранной вкладкой в ​​BottomNavigationView, как и в TabLayout, но пока не могу найти никакого решения.

BottomNavigationView

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:background="@android:color/background_dark"
        app:itemTextColor="@color/colorAshWhite"
        app:itemIconTint="@color/colorAshWhite"
        app:labelVisibilityMode="labeled"
        app:menu="@menu/main_bottom_nav"/>

TabLayout

TabLayout Sample

1 Ответ

0 голосов
/ 30 марта 2019

У меня есть грязный хак для этого,

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId()) {

                case R.id.firstItem:
                    underlineSelectedItem(bottomNavigationView, R.id.firstItem);
                    break;
return false;
        }
    });

Используйте этот метод,

private void underlineSelectedItem(BottomNavigationView bottomNavigationView, int selectedID) {

    for (int i = 0; i < bottomNavigationView.getMenu().size(); i++) {
        MenuItem menuItem = bottomNavigationView.getMenu().getItem(i);
        menuItem.setTitle(menuItem.getTitle().toString().replaceAll("[<u>/]", ""));
    }
    MenuItem menuItem = bottomNavigationView.getMenu().findItem(selectedID);
    String currentText = (String) menuItem.getTitle();
    String convertedText = "<u>" + currentText + "</u>";
    menuItem.setTitle(Html.fromHtml(convertedText));
}

Я знаю, что это несколько уродливо, но я думаю, что нет другого способа сделать это.

...