如何像在TabLayout中那样在BottomNavigationView中获得选定的选项卡行?

时间:2019-03-30 13:57:12

标签: android android-layout android-theme android-tablayout bottomnavigationview

我正试图像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 :(得分:0)

为此,我有一个肮脏的技巧,

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));
}

我知道这有点丑陋,但我认为没有其他方法可以做到。